在laravel使用Token进行用户认证
首先先安装拓展包php
composer require tymon/jwt-auth 0.5.*
而后在配置中注册laravel
Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class
.....
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class
发布配置文件生成密钥web
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"
php artisan jwt:generate
而后建立注册和登陆路由数据库
/routes/web.php
Route::post('/register', 'Auth\RegisterController@register');
Route::post('/login','Auth\LoginController@email');
去控制器建立注册用户方法json
app/Http/Controllers/Auth/RegisterController.php
protected function create(array $data){}
public function register(Request $request)
{
$this->validator($request->all())->validate();
//验证的规则
$user = $this->create($request->all());//存数据到数据库
$token = JWTAuth::fromUser($user);
//经过用户对象实例建立token
return ["token" => $token]; }
接下来建立登陆的方法,这里我是用邮箱登陆app
app/Http/Controllers/Auth/LoginController.php
public function email(Request $request) {
// grab credentials from the request
$credentials = $request->only('email', 'password');
try {
// attempt to verify the credentials and create a token for the user
if (! $token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'invalid_credentials'], 401);
}
} catch (JWTException $e) {
// something went wrong whilst attempting to encode the token
return response()->json(['error' => 'could_not_create_token'], 500);
}
// all good so return the token
return response()->json(compact('token'));
}
以后就会获得composer
{
“token”:”eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwiaXNzIjoiaHR0cDpcL1wvbG9jYWx
ob3N0OjgwMDFcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNDUxODg4MTE5LCJleHAiOjE0NTQ1MTYxMTksIm5iZiI6MTQ1MTg4OD
}ide
token能够设置Authorization头来使用:svg
Authorization: Bearer {yourtokenhere}post
也能够放进URL中使用
http://localhost:8001?token={yourtokenhere}
用户完成登陆注册以后就能够设置须要登陆后才能访问的路由,首先到
app/Http/Kernel.php
protected $routeMiddleware = [
...
'jwt.auth' => 'Tymon\JWTAuth\Middleware\GetUserFromToken',
'jwt.refresh' => 'Tymon\JWTAuth\Middleware\RefreshToken',
];
而后就是设置路由
routes/web.php
Route::group(['middleware' => 'jwt.auth', 'providers' => 'jwt'], function () {
Route::post('/test', 'TestController@test');
});
这样就表明在访问/test路由的时候须要带有token,登陆才能访问
而获取用户信息则能够在TestController中的test方法中采用
$user = JWTAuth::parseToken()->authenticate();//获取用户信息