Laravel 5.3 Passport JWT认证

Pha*_*007 19 laravel-5.3

早在我使用laravel 5.2时,我使用第三方软件包https://github.com/tymondesigns/jwt-auth/进行基于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和passport中发出JWT请求,而不指定client_id和client_secret.

Pha*_*007 42

所以,最后我回答了我自己的问题.希望这将有助于面临类似问题的人.

可以使用Laravel 5.3护照完成JWT身份验证,只需按照以下步骤操作:

或按照以下步骤操作:

  • 作曲家需要laravel /护照
  • 添加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();
  }
Run Code Online (Sandbox Code Playgroud)

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

Route::post('auth', 'UserController@auth');

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

  Route::resource('user', 'UserController@index');

});
Run Code Online (Sandbox Code Playgroud)

现在http://localhost:8000/auth使用电子邮件地址和密码发出POST请求,如屏幕截图所示(http://pix.toile-libre.org/upload/original/1483094937.png)这将为您提供accessToken,您可以使用此令牌使用Authorization标头在您的应用程序中发出其他请求,Bearer XXX其中xxx是您从/ api/auth端点收到的accessToken.

现在,/api/user使用Authorization标头和标记值发出GET请求,这将返回经过身份验证的用户的详细信息.(例如:http://pix.toile-libre.org/upload/original/1483095018.png)

我也在我的博客上发布了这些步骤:http://chatterjee.pw/larvel-passport-jwt-authentication/

我希望这有帮助!

  • 感谢您的分享,但是:1.没有refresh_token 2.我没有在这里找到任何JWT相关人员,这只是access_token 3.我不明白为什么你花了这么多时间在这上面,它是" attempt()"Autah"的方法和"HasApiTokens"特征的"createToken()"方法 (9认同)
  • 这个令牌解决方案绝对不是JWT,因此不能解答您原来的问题,使这个问题和答案误导其他人.由于这里的问答,浪费了很多时间以为这是JWT解决方案. (8认同)
  • 这是个人访问令牌,而不是 JWT。在客户端 javascript 中提供个人访问令牌是一种安全责任,因为它们永不过期,并且如果您没有精心制作范围,并且通常会为用户提供对您的 api 的完全访问权限,以及与此相关的中间件,具体取决于您的应用程序的性质和访问控制。 (3认同)
  • 这不是 JWT。它是带有自定义路线的纯粹简单的护照身份验证。 (2认同)