Laravel 核心技术:基于 JWT 实现 Laravel API 认证(laravel怎么读)

网友投稿 277 2022-07-24

什么是jwt

jwt单词代表的意思就是JSON Web Token。

我们在做api请求的时候,通常要使用token,来验证是否这个请求能不能访问。

一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。

为什么使用jwt

Session是在服务器端的,而JWT是在客户端的。

Session方式存储用户信息的最大问题在于要占用大量服务器内存,增加服务器的开销,而JWT方式将用户状态分散到了客户端中,可以明显减轻服务端的内存压力。

Laravel中如何使用jwt

1.composer 安装jwt-auth

composer require tymon/jwt-auth 1.0.0-rc.1

2.注册我们的服务提供者

'providers' => [

Tymon\JWTAuth\Providers\LaravelServiceProvider::class,

]

3.发布配置文件

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

4.生成密钥

php artisan jwt:secret

5.配置Auth guard,让api的driver使用jwt

'guards' => [

'api' => [

'driver' => 'jwt',

'provider' => 'users',

],

],

6.更改 User Model,让User 支持 jwt-auth

use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject

{

/**

* Get the identifier that will be stored in the subject claim of the JWT.

*

* @return mixed

*/

public function getJWTIdentifier()

{

return $this->getKey();

}

/**

* Return a key value array, containing any custom claims to be added to the JWT.

*

* @return array

*/

public function getJWTCustomClaims()

{

return [];

}

}

下面就可以使用了,跟laravel csrf-token一样我们在每个模版meta中注册api-token。

每次ajax请求的时候获取api-token放置到header中就可以了。

let api_token = document.head.querySelector('meta[name="api-token"]');

if(api_token) {

window.axios.defaults.headers.common['Authorization'] = api_token.content;

}

哪个api路由需要使用jwt,只需要加入'auth:api'中间件就可以了。

Route::middleware('auth:api')->group(function($router) {

// 点赞

$router->get('/post/is-zan/{zan_post}','\App\Api\Controllers\PostController@isZan');

});

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:2019 年 PHP 开发者调查报告(JetBrains版)(2019msi冠军)
下一篇:10分钟了解Docker,运维和开发视角有什么不同?(熟悉docker)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~