摘要:在下新建無效無效然后在的下添加自定義的跨域中間鍵在路由和下的構(gòu)造函數(shù)調(diào)用。免責(zé)由于時間關(guān)系,沒有在截圖了,參考此文章的小伙伴自行進(jìn)行測試下面例子源用了很多文檔代碼
安裝
composer create-project --prefer-dist laravel/laravel sample "5.5.*"安裝依賴
composer install安裝jwt-auth
composer require tymon/jwt-auth or 在composer.json中添加 `"tymon/jwt-auth": "^1.0.0-rc.2",` 終端:composer update
在config/app.php的providers中
"providers" => [ ... TymonJWTAuthProvidersLaravelServiceProvider::class, ]
終端運(yùn)行:php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"會產(chǎn)生config/jwt.php的配置文件
再運(yùn)行:php artisan jwt:secret生成key
建Model運(yùn)行:
php artisan make:model Models/Admin -m php artisan make:model Models/User -m
database/migrations下
遷移文件中
**admins:** Schema::create("admins", function (Blueprint $table) { $table->increments("id"); $table->string("name"); $table->string("email")->unique(); $table->string("password"); $table->string("avatar")->nullable(); $table->timestamps(); }); **users:** Schema::create("users", function (Blueprint $table) { $table->increments("id"); $table->string("name"); $table->string("email")->unique(); $table->string("password"); $table->string("avatar")->nullable(); $table->timestamps(); });修改Model(USer和Admin是一樣的)
getKey(); } /** * Return a key value array, containing any custom claims to be added to the JWT. * * @return array */ public function getJWTCustomClaims() { return []; } }
在config/auth.php中配置,找到對應(yīng)的修改成自己的
"guards" => [
"web" => [ "driver" => "session", "provider" => "users", ], "api" => [ "driver" => "jwt", "provider" => "users", ], "admin" => [ "driver" => "jwt", "provider" => "admins", ],
],
"providers" => [
"users" => [ "driver" => "eloquent", "model" => AppModelsUser::class, "table" => "users", ], "admins" => [ "driver" => "eloquent", "model" => AppModelsAdmin::class, "table" => "admin_users" ],
],
路由在routes/api.php
Route::group([
"middleware" => "api", "prefix" => "auth"
], function ($router) {
Route::post("login", "AuthController@login"); Route::post("logout", "AuthController@logout"); Route::post("refresh", "AuthController@refresh"); Route::post("me", "AuthController@me");
});
控制器(關(guān)鍵)運(yùn)行:php artisan make:controller AdminController創(chuàng)建控制器
注:此處主要是用了guard("admin")來區(qū)分要調(diào)用的表和Model這里是在auth.php中配置的
middleware("myauth", ["except" => ["login"]]); } /** * Get a JWT via given credentials. * * @return IlluminateHttpJsonResponse */ public function login() { $credentials = request(["email", "password"]); if (! $token = auth()->guard("admin")->attempt($credentials)) { return response()->json(["error" => "Unauthorized"], 401); } return $this->respondWithToken($token); } /** * Get the authenticated User. * * @return IlluminateHttpJsonResponse */ public function me() { return response()->guard("admin")->json(auth()->user()); } /** * Log the user out (Invalidate the token). * * @return IlluminateHttpJsonResponse */ public function logout() { auth()->guard("admin")->logout(); return response()->json(["message" => "Successfully logged out"]); } /** * Refresh a token. * * @return IlluminateHttpJsonResponse */ public function refresh() { return $this->respondWithToken(auth()->guard("admin")->refresh()); } /** * Get the token array structure. * * @param string $token * * @return IlluminateHttpJsonResponse */ protected function respondWithToken($token) { return response()->json([ "access_token" => $token, "token_type" => "bearer", "expires_in" => auth()->factory()->getTTL() * 60 ]); } }中間鍵
由于使用了多表認(rèn)證,所以不能使用jwt自帶的中間鍵auth:api or jwt.auth,我自己建了一個中間鍵[myauth]來做路由驗證。
在app/Http/Middleware下新建
namespace AppHttpMiddleware; use Closure; use IlluminateSupportFacadesAuth; class AuthMiddleware { public function handle($request, Closure $next) { try { $user = auth()->guard("admin")->userOrFail(); if(!$user) { return response()->json(["message" => "jwt 無效"], 401); } } catch (TymonJWTAuthExceptionsUserNotDefinedException $e) { return response()->json(["message" => "jwt 無效"], 401); } return $next($request); } }
然后在app/Http/Kernel的$routeMiddleware下添加
protected $routeMiddleware = [
... "cors" => AppHttpMiddlewareClientRequestCors::class, //自定義的跨域中間鍵 "myauth" => AppHttpMiddlewareAuthMiddleware::class, ... ];
在路由和Controller下的構(gòu)造函數(shù)調(diào)用。
免責(zé)由于時間關(guān)系,沒有在PostMan截圖了,參考此文章的小伙伴自行進(jìn)行測試
下面例子源用了很多jwt-auth文檔代碼
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30738.html
摘要:我的博客中文文檔中使用輔助文章參考這篇文章基本就能搭建出環(huán)境,我使用的版本跟他一樣,不知道別的版本有啥大的區(qū)別,但是網(wǎng)上找的其他一些文章使用的是舊的版本,封裝的東西路徑可能不一樣,可能會保錯,有些文檔還說要手動添加和,其實新版本不需要。 我的github博客:https://zgxxx.github.io/ dingo api 中文文檔: https://www.bookstack....
摘要:如何做用戶認(rèn)證根據(jù)文檔描述,提供用戶認(rèn)證的接口,他的核心是看守器和提供器,看守器定義怎么認(rèn)證用戶,提供器定義怎么檢索用戶。 最近的一個PHP項目,上一個項目是采用ThinkPHP來弄的,因為很早就聽說過Laravel的大名,所以進(jìn)了Laravel的官網(wǎng),意外發(fā)現(xiàn)了Lumen,正好我項目是提供API的,所以選擇了Lumen,因為是Laravel的精簡版,看了幾天的Laravel文檔,也總...
摘要:最近項目做認(rèn)證,最終技術(shù)選型決定使用,項目框架使用的是,使用有比較方便使用的開源包。使用安裝,使用的框架版本為,最新穩(wěn)定版本為。 最近項目做API認(rèn)證,最終技術(shù)選型決定使用JWT,項目框架使用的是laravel,laravel使用JWT有比較方便使用的開源包:jwt-auth。 使用composer安裝jwt-auth,laravel使用的框架版本為5.0,jwt-auth最新穩(wěn)定版本...
摘要:默認(rèn)的時間為周。大概意思就是如果用戶有一個,那么他可以帶著他的過來領(lǐng)取新的,直到周的時間后,他便無法繼續(xù)刷新了,需要重新登錄。指定在刷新令牌時要保留的聲明密鑰。為了使令牌無效,您必須啟用黑名單。指定用于對用戶進(jìn)行身份驗證的提供程序。 showImg(https://segmentfault.com/img/remote/1460000012606251?w=1920&h=1280); ...
摘要:在開發(fā)中,用戶認(rèn)證是核心,是數(shù)據(jù)是否有保障的前提,目前主要有兩種常用方式進(jìn)行用戶認(rèn)證和。為了學(xué)習(xí)在中的使用,最好的辦法就是在程序員同志網(wǎng)搜索有關(guān)插件,找個最多的那個拿來研究研究。 通過上一篇《學(xué)習(xí) Lumen 用戶認(rèn)證 (一)》https://mp.weixin.qq.com/s/KVUQE2DUetNB2kqxHs0VDg的學(xué)習(xí),大致懂了 Lumen 的用戶認(rèn)證主要使用 「api」的...
閱讀 3147·2021-10-12 10:11
閱讀 1851·2021-08-16 10:59
閱讀 2864·2019-08-30 15:55
閱讀 1237·2019-08-30 14:19
閱讀 2048·2019-08-29 17:03
閱讀 2482·2019-08-29 16:28
閱讀 3231·2019-08-26 13:47
閱讀 2899·2019-08-26 13:36