我使用tymondesigns / jwt-auth在Laravel中构建了一个api来验证用户。
我按照github上的教程进行操作,登录工作正常:
public function login() {
if (!$token = JWTAuth::attempt(Input::only('email', 'password'))) {
return response()->json(['error' => true], HttpResponse::HTTP_UNAUTHORIZED);
}
$user = User::where('email', Input::get('email'))->first();
return response()->json(array(
'user' => $user,
'token' => compact('token')['token'])
);
}
对于回复,我得到了令牌。
但是每当我尝试使用toke时,我得到了:
[
"Token is invalid"
]
即:
public function getUser() {
$token = JWTAuth::getToken();
return response()->json(JWTAuth::toUser($token));
}
这是{{url}}/api/getUser
与标题Authorization: Bearer {{token}}
我的routes.php包含以下内容:
Route::group(array('prefix' => 'api'), function() {
Route::post('/login', 'API\UserController@login');
Route::get('/getUser', ['before' => 'jwt-auth', 'uses' => 'API\UserController@getUser']);
});
如何使用令牌?我在这里错过了什么吗?
更新:
我得到了这样的代币:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjEsImlzcyI6Imh0dHA6XC9cL3NtYXJ0YXBwXC9hcGlcL2xvZ2luIiwiaWF0IjoxNDY2Mjc5ODUxLCJleHAiOjE0NjYyODM0NTEsIm5iZiI6MTQ2NjI3OTg1MSwianRpIjoiYjNkZjViZGNiMjQ2YWU0NzVlZDYwODQxMWFlZDNkMTAifQ.pqU0pWKVzmOel51ObyE9vKLk07tefh2lDE-fp-AOavE
在https://jwt.io上检查令牌后,我的签名无效。 为什么我会收到无效签名,如何使其有效?
答案 0 :(得分:1)
试试这个
public function getUser() {
// set the token on the object
JWTAuth::parseToken();
// get the user from token
$user = JWTAuth::parseToken()->authenticate();
return response()->json(compact('user'));
}
答案 1 :(得分:0)
试试这个,
定义一个构造函数,这样你就可以通过使用$ this-> jwtauth-> toUser()来获取用户,而不是在函数中重复使用JWTAuth $ jwtauth。
private $jwtauth;
public function __construct(JWTAuth $jwtauth)
{
$this->jwtauth = $jwtauth;
}
public function getUser()
{
$user = $this->jwtauth->toUser();
return response($user);
}
答案 2 :(得分:0)
您可以那样做:
public function login() {
if (!$token = JWTAuth::attempt(Input::only('email', 'password'))) {
return response()->json(['error' => true],
HttpResponse::HTTP_UNAUTHORIZED);
}
$user = User::where('email', Input::get('email'))->first();
return response()->json(array(
'user' => $user,
'token' => compact(['token'])
);
}