$user = User::first(); $token = JWTAuth::fromUser($user);
上面的 2 个方法也有第二个参数,可以传递一个 '自定义声明' 的数组
在解码 token 时,这些自定义声明,将和其他声明一起提供。
注意:添加大量的自定义声明,将增加 token 的大小
创建一个基于任意你喜欢的内容的 token
作者给我们提供了对底层类和方法的访问,来提供高级的、可自定义的功能。
示例使用了内建的 'Tymon\JWTAuth\PayloadFactory' 实例(或者使用 JWTFactory 门面):
$customClaims = ['foo' => 'bar', 'baz' => 'bob']; $payload = JWTFactory::make($customClaims); $token = JWTAuth::encode($payload);
也可以在 'Tymon\JWTAuth\PayloadFactory' 实例上链式调用声明(或者使用 JWTFactory 门面):
$payload = JWTFactory::sub(123)->aud('foo')->foo(['bar' => 'baz']); $token = JWTAuth::encode($payload);
认证(Authentication)
一旦用户使用他们的凭证登录,下一步将使用 token 发起一个后续请求,来检索用户详情,以便我们可以将其显示为已登录。
使用内置方法,通过 http 发起认证请求,我们需要设置一个 Authorization 请求头,如下所示:
Authorization: Bearer {yourtokenhere}
Apache 用户需要注意:
Apache 好像会丢弃 Authorization 请求头,如果该请求头不是 base64 编码的 user/pass 组合。为了解决此问题,我们可以在 apache 配置文件中添加一下内容:
RewriteEngine On RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
或者,我们可以通过在查询字符串中包含 token 来实现:
http://api.mysite.com/me?token={yourtokenhere}
为了从请求中获取 token,我们可以:
// 会设置 token 到返回的对象中 JWTAuth::parseToken(); // 接着,我们可以继续链式调用方法 $user = JWTAuth::parseToken()->authenticate();
为了获取 token 的值,我们可以调用:
$token = JWTAuth::getToken();
如果设置了一个 token,则会返回 token,否则(为方便起见),它将使用上述方法,尝试从请求中解析 token,如果没有设置 token 或 没有 token 可以被解析,最终返回 false。
当然,如果在我们的程序中有其他入口点,我们也可以根据需要手动设置 token。例如:
JWTAuth::setToken('foo.bar.baz');