2016-03-21 33 views
0

Laravel 5.1 uygulamasında, VWT yetkisini vatansız oturum açma ve doğrulama için kullandığım bir API bölümünde oluşturdum. Uygulama, laravel tarafından sağlanan Auth hizmetini ve 'kullanıcı' tablosunu varsayılan olarak kullanır. API'm 'istemciler' tablosunda kimlik doğrulaması gerekiyor. Auth.php yapılandırma dosyasını model => 'Models\AuthClient' ve table => 'clients' olarak değiştiren bir Middleware hazırlayarak JWT'yi kullanırken kullanıcı tablosunu geçici olarak yönetmeyi başardım. Tüm iyi, doğrulama çalışmaları, kimlik bilgileri doğru olduğunda belirteci oluşturur.Laravel 5.1 JWT Oturum açmış kullanıcıyı özel tablodan alın

Ara Katman:

public function handle($request, Closure $next) 
{ 
    \Config::set('auth.model', 'App\Models\AuthClient'); 
    \Config::set('auth.table', 'clients'); 

    return $next($request); 
} 

ApiAuthController giriş fonksiyonu:

public function getContracts(Request $request) 
{ 
    $client = JWTAuth::parseToken()->authenticate(); 
    $contracts = $client->contracts; 
    dd($client); 

    return response()->json($contracts); 
} 

authenticate(): Böyle belirteci gelen açmış kullanıcıyı almaya çalıştığınızda

public function authenticate(Request $request) 
{ 
    $cred = $request->only('email', 'password', 'client_code'); 

    $validator = $this->validator($cred); 
    if($validator->fails()) { 
     return response()->json($validator->errors()); 
    } 

    $credentials = ['email'=> $cred['email'], 'password'=> $cred['password']]; 

    /* 
    * If the user enters a "client_code", login the user with that credential 
    */ 
    if(issetNotEmpty($cred['client_code'])) { 
     \App\Models\AuthClient::$defaultAuth = 'client_code'; 
     $credentials = ['client_code' => $cred['client_code'], 'password' => $cred['client_code']]; 
    } 

    try { 
     if (!$token = JWTAuth::attempt($credentials)) { 
      return response()->json(['error' => 'Datele de autentificare nu sunt corecte.'], 401); 
     } 
    } catch (JWTException $e) { 
     // something went wrong 
     return response()->json(['error' => 'could_not_create_token'], 500); 
    } 

    // if no errors are encountered we can return a JWT 
    return response()->json(compact('token')); 
} 

Benim sorundur işlevi, 'client' altının yerine 'users' tablosundan bir eşleşme modeli döndürür ümit auth.php ve jwt.php 'Models \ AuthClient' olarak ayarladım ve ID 'istemcilerden'.

AuthCient Modeli:

class AuthClient extends Model implements AuthenticatableContract, CanResetPasswordContract 
{ 
    use Authenticatable, CanResetPassword; 

    protected $table = 'clients'; 

    public static $defaultAuth = 'email'; 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 'email', 'login_password', 'api_token']; 

    protected $hidden = ['login_password', 'api_token']; 
} 

ben eksik?

Teşekkürler!

cevap

2

Aracıyı ana yol grubuna (api-amanet) koymuştum ve sanırım bu hile yaptı. Kimlik doğrulama işlevinin içinde auth.php'yi değiştirmeden önce, Auth sınıfının varsayılan auth.php ayarlarıyla zaten hazırlandığını ve ayarları değiştirdiğimde "yenilemediğini" tahmin ediyorum.

/** ********************* API ROUTES ********************** */ 
Route::group(['prefix' => 'api-amanet', 'middleware' => ['config.clients']], function() 
{ 

Route::post('authenticate','Api\[email protected]'); 

Route::group(['middleware' => ['jwt.auth']], function() { 
    Route::post('password/reset', 'Api\[email protected]'); 

    Route::resource('update-profile','Api\[email protected]'); 

    Route::resource('get-contracts','Api\[email protected]'); 
}); 

}); Umarım bu başka birine yardımcı olur.

İlgili konular