2016-12-29 252 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解决方案。 –