laravel用户认证 JWT-Auth 前后端分离
本章主要介绍前后端彻底分离时,如何使用laravel实现API认证,(laravel5.5)
首先,你得有一个laravel项目,拉取新框架命令:composer create-project laravel/laravel 项目名称 --prefer-dist “5.5.*”
Begining:
1.安装Jwt-auth扩展包。
composer require tymon/jwt-auth
2.安装完成后在配置文件 config/app.php 中注册服务提供者和别名。
…
‘providers’ => [
…
Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class,
]
…
‘aliases’ => [
…
‘JWTAuth’ => Tymon\JWTAuth\Facades\JWTAuth::class,
]
3.发布资源和配置。
php artisan vendor:publish --provider=“Tymon\JWTAuth\Providers\JWTAuthServiceProvider”
4.在发布的配置中生成key。
php artisan jwt:generate
不出意外,上述命令会报错。
这时你需要在vendor / tymon / jwt-auth/src / Commands中的JWTGenerateCommand.php中
写入public function handle() { $this->fire(); }
如:
5.再次执行 php artisan jwt:generate
6.编辑 app/Http/Kernel.php 添加 jwt.auth 和 jwt.refresh 到应用路由中间件数组:
protected $routeMiddleware = [
…
‘jwt.auth’ => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
‘jwt.refresh’ => \Tymon\JWTAuth\Middleware\RefreshToken::class,
];
完成以上操作接下来就行注册路由,创建控制器,进行 API 功能验证了。
一、创建路由
Route::get(‘register’,‘AuthController@register’); //注册
Route::get(‘login’,‘AuthController@login’); //登录
Route::post(‘auth/login’, ‘AuthController@login’);
Route::group([‘middleware’ => ‘jwt.auth’], function(){
Route::get(‘auth/user’, ‘AuthController@user’);
Route::post(‘auth/logout’, ‘AuthController@logout’);
});
Route::group([‘middleware’ => ‘jwt.refresh’], function(){
Route::get(‘auth/refresh’, ‘AuthController@refresh’);
});
二、控制器代码
<?php namespace App\Http\Controllers; use App\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Validator; use Tymon\JWTAuth\Facades\JWTAuth; class AuthController extends Controller { //用户注册 public function register(Request $request){ $valid = Validator::make($request->all(), [ 'name' => 'required|string|unique:users', 'email' => 'required|email|unique:users', 'password' => 'required|string|min:6|max:10', ]); if ($valid->fails()) { return array( 'code' => 1, 'message' => $valid->errors()->first(), 'data' => [] ); } $user = new User(); $user->name = $request->name; $user->email = $request->email; $user->password = bcrypt($request->password); $user->save(); //插入数据库,创建用户 return $user; } //用户登录 public function login(Request $request){ $credentials = $request->only('email', 'password'); if(!$token = JWTAuth::attempt($credentials)){ return 'error'.$token; } // return Auth::user(); //此处可以获取登录成功用户的信息,如账号,邮箱等 return $token; } public function logout(){ JWTAuth::invalidate(); return '退出成功'; } public function user() { $user = User::find(Auth::user()->id); return response([ 'status' => 'success', 'data' => $user ]); } public function refresh() { return response([ 'status' => 'success' ]); } } 至此,只要访问jwt.auth中间件内的路由,都需要登录,登陆之后会得到一个token,带上token才能访问。 PS:存储用户信息的表为框架自带的,只需要执行迁移命令 php artisan migrate 你也可以根据项目需要重新创建用户表。 学院君-原文链接:https://laravelacademy.org/post/9178.html#toc_3- 使命必达: 深入剖析WCF的可靠会话[原理揭秘篇](上)
- 其实添加数据也可以这样简单——表单的第三步抽象(针对UI及后置代码)
- 为Symfony2和Redis正名,基于PHP的10亿请求/周网站打造
- 如何使用Python基线预测进行时间序列预测
- 如何使用统计显着性检验来解释机器学习结果
- 其实添加数据也可以这样简单——表单的第一步抽象(针对数据访问层)《怪怪设计论: 抽象无处不在 》有感
- WCF服务端运行时架构体系详解[上篇]
- 使命必达: 深入剖析WCF的可靠会话[编程篇](下)
- 在网页里让文本框只能输入数字的一种方法。外加回车换Tab
- 如何用Python从零开始实现简单的线性回归
- 使命必达: 深入剖析WCF的可靠会话[编程篇](上)
- 页面回发后,让页面自动滚动到指定位置的一种简单的方法
- [自定义服务器控件] 第二步:下拉列表框。
- WCF服务端运行时架构体系详解[中篇]
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Flutter Widgets 之 Container
- Flutter Widgets 之 Row和Column
- Flutter Widgets 之 SafeArea
- Flutter Widgets 之 Wrap
- Flutter Widgets 之 Expanded和Flexible
- 可能是Asp.net Core On host、 docker、kubernetes(K8s) 配置读取的最佳实践
- Flutter Widgets 之 AnimatedContainer
- Flutter Widgets 之 Opacity 和AnimatedOpacity
- 聊聊常见的服务(接口)认证授权
- Flutter Widgets 之 FutureBuilder
- [Hei-Ocelot-Gateway ].Net Core Api网关Ocelot的开箱即用版本
- Flutter Widgets 之 InkWell 和 Ink
- Flutter Widgets 之 BottomNavigationBar
- Flutter Widgets 之 PageView
- 笔试题:代码如何实现“百钱买百鸡”?