laravel5.5安装jwt-auth 生成token令牌的示例(3)

$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');

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4091.html