2016-12-29 481 views
11

早些時候當我使用laravel 5.2時,我使用第三方包https://github.com/tymondesigns/jwt-auth/來進行基於JWT的認證。我們只需傳遞用戶名和密碼即可獲得令牌。Laravel 5.3護照JWT認證

現在在laravel 5.3中引入護照我想做一個基於JWT的認證,但護照要求我指定client_id和client_secret以及用戶名和密碼。這在tymondesigns/jwt-auth中不存在。

如果我做不CLIENT_ID一個請求,那麼它拋出一個錯誤http://pix.toile-libre.org/upload/original/1482908288.png但是當我通過CLIENT_ID和client_secret然後正常工作http://pix.toile-libre.org/upload/original/1482908143.png

我怎樣才能使laravel 5.3和護照JWT請求,只用用戶名和密碼,並且不指定client_id和client_secret。

回答

26

所以,最後我回答了我自己的問題。希望這會幫助面臨類似問題的人。

JWT認證可以使用Laravel 5.3護照,只要按照下面的步驟來完成:

描述或請按照下列步驟操作:

  • 作曲家需要laravel /護照
  • add Laravel\Passport\PassportServiceProvider::class,給您的應用程序提供商
  • PHP工匠遷移
  • PHP工匠護照:安裝
  • 添加HasApiTokens性狀您的用戶模型
  • 護照::路線();在AppServiceProvider
  • 配置API司機護照

完成後,創建一個UserController中,並添加了以下方法:

public function auth(Request $request) 
{ 

    $params = $request->only('email', 'password'); 

    $username = $params['email']; 
    $password = $params['password']; 

    if(\Auth::attempt(['email' => $username, 'password' => $password])){ 
    return \Auth::user()->createToken('my_user', []); 
    } 

    return response()->json(['error' => 'Invalid username or Password']); 
} 

    public function index(Request $request) 
    { 
    return $request->user(); 
    } 

在路由/ api.php,添加以下路線:

Route::post('auth', '[email protected]'); 

Route::group(['middleware' => 'auth:api'], function(){ 

    Route::resource('user', '[email protected]'); 

}); 

現在使用電子郵件地址和密碼發送POST請求到http://localhost:8000/auth,如屏幕截圖所示(http://pix.toile-libre.org/upload/original/1483094937.png),這將讓你的的accessToken,您可以使用此標記,使您的應用程序與Authorization頭和Bearer XXX其中xxx爲的accessToken/API/AUTH端點收到的其他請求。

現在,使用Authorization標頭和令牌值向/api/user發送GET請求,這將返回經過身份驗證的用戶的詳細信息。 (如:http://pix.toile-libre.org/upload/original/1483095018.png

我也貼在我的博客這些步驟http://chatterjee.pw/larvel-passport-jwt-authentication/

我希望這有助於!

+0

我們可以製作自定義標記嗎?不是來自用戶的對象 –

+2

感謝您的分享,但: 1.沒有refresh_token 2.我沒有在這裏找到任何JWT相關人員,它只是access_token 3.我不明白爲什麼你花了這麼多在此,它是「HasApiTokens」特性的「Auth」和「createToken()」方法的「attempt()」方法 –

+1

此令牌解決方案絕對不是JWT,因此不是您原始問題的答案,這個問題和答案誤導別人。由於此處的問答,浪費了大量時間,認爲這是JWT解決方案。 –