早在我使用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。
答案 0 :(得分:41)
所以,最后我回答了我自己的问题。希望这将有助于面临类似问题的人。
JWT身份验证可以使用Laravel 5.3护照完成,只需按照以下步骤操作:
或者按照以下步骤操作:
Laravel\Passport\PassportServiceProvider::class,
添加到您的应用提供商HasApiTokens
特征添加到您的用户模型完成后,创建一个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();
});