我是laravel 5中JWT令牌系统的新手并使用tymon JWT Auth
我设法创建了我的自定义JWT令牌和我的代码,如下所示
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Tymon\JWTAuth\JWTManager as JWT;
use JWTAuth;
use JWTFactory;
use Tymon\JWTAuth\Exceptions\JWTException;
public function login(Request $request)
{
$customClaims = ['foo' => 'bar', 'baz' => 'bob'];
$payload = JWTFactory::make($customClaims);
$token = JWTAuth::encode($payload);
// return response()->json(compact('token')); // This didnt work?Why?
return response()->json(compact($token))->header('Authorization','Bearer '.$token);
}
public function getUser(){
$token = JWTAuth::parseToken();
echo $token;
}
以下是我需要的以下说明
// return response()->json(compact('token'));
答案 0 :(得分:1)
我不认为令牌创建正在正确构建。以下是登录令牌创建的工作代码。为此,请确保config / jwt.php下的“user”模型是适合您应用程序的正确用户模型。
$user = array(
'user' => $request->input('email'),
'password' => $request->input('pass')
);
$customClaims= ['usr' => $user['user']];
if(!$token = JWTAuth::attempt($user, $customClaims)){
abort(401);
}
else{
return response()->json(compact('token'));
}
上面的代码中还包含自定义声明变量,您在正确的轨道上只需要作为尝试函数中的第二个参数传递。
只有客户端需要发送授权:Bearertoken标头以证明他们是他们所说的人(我来自android客户端/服务器jwt背景。很抱歉,如果这不适用于您的应用程序)
3A。对于用户浏览的任何后续页面,您只需添加一个像这样的if语句
if(!$user = JWTAuth::parseToken()->authenticate()){
abort(401);
}
else{
// Code allowing the user to see protected content
}
请参阅问题3的答案。包括带有授权BearerToken
要从JWT Payload中提取数据,您需要在令牌中的第一个句点之后解码文本中的base64编码文本,并将其发送到字符串。然后通过base64_decode($ string)函数运行该字符串。那应该开始给你一些有效载荷数据。
希望这有帮助。
答案 1 :(得分:0)
我在这里遇到了同样的问题,我得到了以下解决方案:
public function whatEver()
{
$token = JWTAuth::parseToken();
$response = $token->getPayload()->get('foo');
return $response
}
这应该返回bar
。
答案 2 :(得分:0)
您可以在用户模型中使用此方法:
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims()
{
return [
'perms' => '
'
];
}