laravel5.5jwt-auth的使用

laravel5.5 + jwt-auth:dev-developphp

  1. 安装扩展
composer require tymon/jwt-auth:dev-develop --prefer-source
  1. 添加服务提供器

config/app.php中增长provider者和aliases,写入对应的数组laravel

//provider
'Tymon\JWTAuth\Providers\LaravelServiceProvider'

//aliases
'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTAuth'
'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory'
  1. 发布配置文件
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" --force

命令会生成 config/jwt.php 配置文件git

  1. 生成key
php artisan jwt:secret

会在.env 添加JWT_SECRETgithub

JWT_SECRET=z4Pv7YXnOOodpuGO7FOy1vLsxxxxicmoU
  1. 更改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 [];
    }
}
  1. 配置auth看守器

config/auth.php中修改看守器api

'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],

...

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],
  1. 配置路由
Route::get('/signin', "AuthController@signin");

//这里分配了中间件,验证是否登陆
Route::group(['middleware' => ['auth:api']], function(){
    Route::get('menu', 'MenuController@index');
});
  1. 登陆验证
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/Installationapp

http://jwt-auth.readthedocs.io/en/docs/quick-start/#update-your-user-modelcomposer

https://github.com/tymondesigns/jwt-auth/issues/1298ide

因为使用老版产生的问题ui

  1. Class Tymon\JWTAuth\Providers\JWT\Namshi does not exist

    php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" --force

  2. 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 [];
    }
}
相关文章
相关标签/搜索