Laravel 5.3 Passport JWT认证

时间:2016-12-29 09:40:27

标签: 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。

4 个答案:

答案 0 :(得分:41)

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

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

或者按照以下步骤操作:

  • 作曲家需要laravel / passport
  • Laravel\Passport\PassportServiceProvider::class,添加到您的应用提供商
  • php artisan migrate
  • php artisan passport:安装
  • 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();
  }

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

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

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

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

});

现在使用电子邮件地址和密码向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 :(得分:1)

这一切都弄混了。 Passport是类似Facebook的应用程序的理想选择,在这些应用程序中,您希望用户的客户端安全地对您的API进行身份验证。

如果您要做的只是使用Tyson JWT软件包构建rest API(例如,健康和健身应用程序),就足够了。这是因为您没有中间人。

答案 2 :(得分:0)

如果您对OAuth和Client事物不感兴趣,您可能希望使用纯JWT身份验证,如果是这样,您可以查看此包:

https://github.com/miladrahimi/larajwt

它声明了一个名为" jwt"的新认证驱动程序。为了保护您的经过身份验证的路由,它提供了一个服务来从您的用户生成jwt,以及一些其他工具,如注销,用户模型缓存,用于检查用户额外属性的过滤器等。

答案 3 :(得分:0)

$请求 - >用户();不适合我,因为中间件配置为web,我也需要+ api。文档不清楚如何控制两种情况。

我能够通过获取Auth Bearer +令牌和Laravel来获取用户详细信息:

use Illuminate\Support\Facades\Auth;

Route::get('/user', function() {
   return Auth::guard('api')->user();
});