Laravel jwt 验证
本章主要介绍前后端彻底分离时,如何使用laravel实现API认证,(laravel5.5)
首先,你得有一个laravel项目,拉取新框架命令:composer create-project laravel/laravel 项目名称 --prefer-dist "5.5.*"
Beginning:
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
你也可以根据项目需要重新创建用户表。
学院君-原文链接:jwt-auth
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: