使用 jwt 認(rèn)證

背景

laravel 版本:5.8

步驟

安裝 jwt
composer require tymon/jwt-auth=1.0.0-rc.5
配置
  1. 生成配置
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

php artisan jwt:secret
  1. config/auth.php 配置
<?php

return [
    ...

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

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        // 使用jwt
        'api' => [
            'driver' => 'jwt',
            'provider' => 'user',
        ],
    ],

    'providers' => [
        // 指定model
        'user' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],  
    ],
];
修改 User Model
<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'nickname',
        'avatar',
        'openid',
        'unionid',
    ];

    /**
     * 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 [];
    }

}

添加自定義 Middleware
<?php

namespace App\Http\Middleware;

use App\Models\User;
use Closure;
use Illuminate\Contracts\Auth\Factory as Auth;

class ApiAuthenticate
{
    /**
     * The authentication guard factory instance.
     *
     * @var \Illuminate\Contracts\Auth\Factory
     */
    protected $auth;

    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Auth\Factory  $auth
     * @return void
     */
    public function __construct(Auth $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if ($this->auth->guard($guard)->guest()) {
            if ($request->header('X-SkipAuth', 0) == 1) {
                $this->skipAuth();
            } else {
                return response('Unauthorized.', 401);
            }
        }

        return $next($request);
    }

    // 跳過認(rèn)證,取第一個
    // 用戶接口調(diào)試柜蜈、站點監(jiān)控
    private function skipAuth()
    {
        $user = User::query()->first();
        $this->auth->login($user);
    }
}
app/Http/Kernel.php 注冊自定義的 Middleware
protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,

        //-------- 在這里添加剛才自定義的 middleware
        'auth.api' => \App\Http\Middleware\ApiAuthenticate::class,
        //-------- 添加結(jié)束

        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];
routes/api.php 添加路由闯参,使用 middleware
Route::post('/user/login', 'UserController@login');

Route::middleware('auth.api')->group(function () {
    Route::get('/user/info', 'UserController@info');
});
完美結(jié)束

// TODO Lumen 使用 jwt

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末能耻,一起剝皮案震驚了整個濱河市袭祟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌存捺,老刑警劉巖簿透,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羹令,死亡現(xiàn)場離奇詭異,居然都是意外死亡孝治,警方通過查閱死者的電腦和手機(jī)列粪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谈飒,“玉大人岂座,你說我怎么就攤上這事『即耄” “怎么了费什?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長手素。 經(jīng)常有香客問我鸳址,道長,這世上最難降的妖魔是什么泉懦? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任稿黍,我火速辦了婚禮,結(jié)果婚禮上崩哩,老公的妹妹穿的比我還像新娘巡球。我一直安慰自己,他們只是感情好琢锋,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布辕漂。 她就那樣靜靜地躺著,像睡著了一般吴超。 火紅的嫁衣襯著肌膚如雪钉嘹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天鲸阻,我揣著相機(jī)與錄音跋涣,去河邊找鬼。 笑死鸟悴,一個胖子當(dāng)著我的面吹牛陈辱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播细诸,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼沛贪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起利赋,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤水评,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后媚送,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體中燥,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年塘偎,在試婚紗的時候發(fā)現(xiàn)自己被綠了疗涉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吟秩,死狀恐怖咱扣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情峰尝,我是刑警寧澤偏窝,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站武学,受9級特大地震影響祭往,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜火窒,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一硼补、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熏矿,春花似錦已骇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慧域,卻和暖如春鲤竹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昔榴。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工辛藻, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人互订。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓吱肌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仰禽。 傳聞我的和親對象是個殘疾皇子氮墨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容