Toggle navigation
菜菜小站
菜菜小站
前端开发
前端开发
前端基础
bootstrap
JavaScript
后端开发
后端开发
php开发
laravel
数据库
编辑器
git
服务器
服务器
https
cos云存储
ubuntu
homestead
微信开发
微信开发
微信小程序
python开发
python开发
python基础
关于
laravel5.5.40使用jwt做权限认证
作者:
菜菜子
|
时间:2018-05-19 14:43:00 |
分类:
php开发
,
后端开发
,
laravel
|
访问: 1,596 次|
评论:
0 评论
# 一、运行composer 加载依赖包 ``` composer require tymon/jwt-auth 1.0.0-rc.1 ``` ![](https://cos.cc430.cn/2018/05/19/1526712442.png) # 二、发布jwt配置文件 ``` php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" ``` 这条命令会在 config 目录创建jwt.php配置文件 ![](https://cos.cc430.cn/2018/05/19/1526712507.png) # 三、生成秘钥 ``` php artisan jwt:secret ``` ![](https://cos.cc430.cn/2018/05/19/1526712532.png) # 四、修改config/auth.php文件 ``` [ 'guard' => 'api', 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'jwt', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ], /* |-------------------------------------------------------------------------- | Resetting Passwords |-------------------------------------------------------------------------- | | You may specify multiple password reset configurations if you have more | than one user table or model in the application and you want to have | separate password reset settings based on the specific user types. | | The expire time is the number of minutes that the reset token should be | considered valid. This security feature keeps tokens short-lived so | they have less time to be guessed. You may change this as needed. | */ 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], ], ]; ``` # 五、修改app/User.php模型文件 修改User.php文件成如下所示 ``` getKey(); } public function getJWTCustomClaims() { return []; } } ``` # 六、自定义认证中间件 ``` php artisan make:middleware RefreshToken ``` 修改App\Http\Middleware\RefreshToken.php ```php checkForToken($request); // Check presence of a token. try { if (!$this->auth->parseToken()->authenticate()) { // Check user not found. Check token has expired. throw new UnauthorizedHttpException('jwt-auth', 'User not found'); } return $next($request); // Token is valid. User logged. Response without any token. } catch (TokenExpiredException $t) { // Token expired. User not logged. try { $newtoken = $this->auth->refresh(); // Get new token. Auth::guard('api')->onceUsingId($this->auth->manager()->getPayloadFactory()->buildClaimsCollection()->toPlainArray()['sub']); } catch (JWTException $e) { // 如果捕获到此异常,即代表 refresh 也过期了,用户无法刷新令牌,需要重新登录。 throw new UnauthorizedHttpException('jwt-auth', $e->getMessage(), $e, $e->getCode()); } } $response = $next($request); return $this->setAuthenticationHeader($response, $newtoken); // Response with new token on header Authorization. } } ``` 注册中间件App\Http\Kernel.php ```php use App\Http\Middleware\RefreshToken; protected $routeMiddleware = [ ...... 'refresh.token'=>RefreshToken::class ]; ``` # 六、routes/api.php添加路由 ``` Route::prefix('auth')->group(function($router) { $router->post('login', 'AuthController@login'); $router->post('logout', 'AuthController@logout'); }); Route::group(['middleware' => 'refresh.token', 'providers' => 'jwt'], function ($api) { // $api->get('user', 'AuthController@getUserInfo'); }) ``` # 七、执行命令新增控制器 ``` php artisan make:controller AuthController ``` ![](https://cos.cc430.cn/2018/05/19/1526713339.png) 修改app/Http/Controllers/AuthController ```php json(['error' => 'Unauthorized'], 401); } return $this->respondWithToken($token); } /** * Get the authenticated User. * * @return \Illuminate\Http\JsonResponse */ public function getUserInfo(Request $request) { // var_dump(); var_dump($request->header('Authorization')); var_dump(JWTAuth::getToken()); $user = JWTAuth::user(); return $user; } /** * Log the user out (Invalidate the token). * * @return \Illuminate\Http\JsonResponse */ public function logout() { auth()->logout(); return response()->json(['message' => 'Successfully logged out']); } /** * Refresh a token. * * @return \Illuminate\Http\JsonResponse */ public function refresh() { return $this->respondWithToken(auth()->refresh()); } /** * Get the token array structure. * * @param string $token * * @return \Illuminate\Http\JsonResponse */ protected function respondWithToken($token) { return response()->json([ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => JWTAuth::factory()->getTTL() * 60, 'user' => JWTAuth::user()#返回当前用户 ]); } } ``` # 八、上传代码到服务器 # 九、依次执行下列命令 * 下载相关依赖包 ``` composer update ``` * 拷贝env文件 ``` cp .env.example .env ``` * 生成项目秘钥 ``` php artisan key:generate ``` * 设置 `JWT sceret` ``` php artisan jwt:secret ``` * 创建软链接 ``` php artisan storage:link ``` * 生成数据表 ``` php artisan migrate ``` # 十、添加数据 进入tinker ``` php artisan tinker ``` ``` >>> namespace App; >>> User::create(['name' => 'Test','email' => 'test@qq.com','password' => bcrypt('123456')]); ``` ![](https://cos.cc430.cn/2018/05/19/1526716017.png) # 十一、使用eolinker进行测试 ![](https://cos.cc430.cn/2018/05/19/1526716095.png) * 请求时需要将登录成功后请求过来的token放在 header 中 Authorization:Bearer +token **Bearer与token之间有个空格** ![](https://cos.cc430.cn/2018/05/19/1526722371.png) 注:报错The token has been blacklisted的前一次会在header头部Authorization参数返还新的token,前端需要进行存储 ![](https://cos.cc430.cn/2018/05/21/1526872411.png) # 十二、参考文档(致谢) [官方文档](http://jwt-auth.readthedocs.io/en/develop/quick-start/ "参考文档") [Laravel 5.5 使用 Jwt-Auth 实现 API 用户认证以及无痛刷新访问令](https://segmentfault.com/a/1190000012606246 "参考文档2")
标签:
laravel5
,
jwt
还不快抢沙发
添加新评论
昵称(必填)
邮箱(必填)
网站(选填)
内容(必填)
提交评论
最新文章
ubuntu自动化安装php文件
laravel 操作redis
laravel-admin静态资源加速
laravel-admin1.6版本表单tag bug修复方法
laravel根据另外一列的值赋予grid某一列editable()
laravel-admin数据来源非数据表信息
laravel判定多对多关系是否存在
最新回复
森木志: 对的 用的就是这个版本 我看plugin.php的...
菜菜子: 插件版本呢?应该用https://github.com...
森木志: 忘记说了,typecho版本是1.2.1,php版本是...
森木志: 遇到灵异事件了,设置是没问题的,按道理来说上传成功后的...
局外人: 下载失败了,大佬帮忙看看是什么原因呢?
青丝: 7355763
菜菜子: 我好像沒有做這個提示,方便加微信吧,我看看什麼問題
青丝: 对的,提示需要8.0PHP
菜菜子: 你版本不對吧
菜菜子: 你是typecho1.2?用的是https://git...
标签
前端框架
bootstrap
laravel5
laravel-admin
laravel
微信小程序
gd库
git
wamp配置
https
表单
cos小工具
微信支付
ajax
cos
cos插件
vue
nginx
homestead
linux
ubuntu
swoole
typecho
编辑器
破解
数组
jwt
sql语言
腾讯云
邮件发送
websocket
队列
微信公众号
分页
日志
elasticsearch
wnmp
vagrant
无限极分类
分销
集合
supervisor
部署
grid
redis
python
标签
刷新
加密处理
验证码
悬浮框
权限控制
markdown
shell
mysql
测试
ui
任务调度
定时任务
deployer
gogs
反向代理
ftp
归档
2019年01月
2018年12月
2018年11月
2018年10月
2018年09月
2018年08月
2018年07月
2018年06月
2018年05月
2018年04月
2018年03月
2017年09月
2017年06月
2017年05月
2017年04月
2017年03月
2017年02月
2017年01月
2016年12月
2016年11月
友情链接
空
//