laravel5.5jwt-auth的使用
laravel5.5 + jwt-auth:dev-develop
- 安装扩展
composer require tymon/jwt-auth:dev-develop --prefer-source
- 添加服务提供器
config/app.php中增加provider者和aliases,写入对应的数组
//provider
'Tymon\JWTAuth\Providers\LaravelServiceProvider'
//aliases
'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTAuth'
'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory'
- 发布配置文件
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" --force
命令会生成 config/jwt.php 配置文件
- 生成key
php artisan jwt:secret
会在.env 添加JWT_SECRET
JWT_SECRET=z4Pv7YXnOOodpuGO7FOy1vLsxxxxicmoU
- 更改user model
<?php
namespace App;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
use Notifiable;
// Rest omitted for brevity
/**
* 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 [];
}
}
- 配置auth看守器
config/auth.php中修改看守器
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
...
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
- 配置路由
Route::get('/signin', "AuthController@signin");
//这里分配了中间件,验证是否登录
Route::group(['middleware' => ['auth:api']], function(){
Route::get('menu', 'MenuController@index');
});
- 登录验证
public function signin(Request $request)
{
if($token = JWTAuth::getToken()){
try{
JWTAuth::invalidate($token);
}catch(\Exception $e){
}
}
$credentials = $request->only('name', 'password');
if (! $token = JWTAuth::attempt($credentials)) {
return $this->error('用户名或密码错误');
}
return $this->success(['token' => $token]);
}
参考资料
https://github.com/tymondesigns/jwt-auth/wiki/Installation
http://jwt-auth.readthedocs.io/en/docs/quick-start/#update-your-user-model
https://github.com/tymondesigns/jwt-auth/issues/1298
由于使用老版产生的问题
-
Class Tymon\JWTAuth\Providers\JWT\Namshi does not exist
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" --force
-
Argument 1 passed to Tymon\JWTAuth\JWT::fromUser() must be an instance of Tymon\JWTAuth\Contracts\JWTSubject
更改user model
<?php
namespace App;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
use Notifiable;
// Rest omitted for brevity
/**
* 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 [];
}
}