摘要:在下新建無效無效然后在的下添加自定義的跨域中間鍵在路由和下的構造函數調用。免責由于時間關系,沒有在截圖了,參考此文章的小伙伴自行進行測試下面例子源用了很多文檔代碼
安裝
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, ]
終端運行:php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"會產生config/jwt.php的配置文件
再運行:php artisan jwt:secret生成key
建Model運行:
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中配置,找到對應的修改成自己的
"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");
});
控制器(關鍵)運行:php artisan make:controller AdminController創建控制器
注:此處主要是用了guard("admin")來區分要調用的表和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 ]); } }中間鍵
由于使用了多表認證,所以不能使用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下的構造函數調用。
免責由于時間關系,沒有在PostMan截圖了,參考此文章的小伙伴自行進行測試
下面例子源用了很多jwt-auth文檔代碼
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30738.html
摘要:我的博客中文文檔中使用輔助文章參考這篇文章基本就能搭建出環境,我使用的版本跟他一樣,不知道別的版本有啥大的區別,但是網上找的其他一些文章使用的是舊的版本,封裝的東西路徑可能不一樣,可能會保錯,有些文檔還說要手動添加和,其實新版本不需要。 我的github博客:https://zgxxx.github.io/ dingo api 中文文檔: https://www.bookstack....
摘要:如何做用戶認證根據文檔描述,提供用戶認證的接口,他的核心是看守器和提供器,看守器定義怎么認證用戶,提供器定義怎么檢索用戶。 最近的一個PHP項目,上一個項目是采用ThinkPHP來弄的,因為很早就聽說過Laravel的大名,所以進了Laravel的官網,意外發現了Lumen,正好我項目是提供API的,所以選擇了Lumen,因為是Laravel的精簡版,看了幾天的Laravel文檔,也總...
摘要:最近項目做認證,最終技術選型決定使用,項目框架使用的是,使用有比較方便使用的開源包。使用安裝,使用的框架版本為,最新穩定版本為。 最近項目做API認證,最終技術選型決定使用JWT,項目框架使用的是laravel,laravel使用JWT有比較方便使用的開源包:jwt-auth。 使用composer安裝jwt-auth,laravel使用的框架版本為5.0,jwt-auth最新穩定版本...
摘要:默認的時間為周。大概意思就是如果用戶有一個,那么他可以帶著他的過來領取新的,直到周的時間后,他便無法繼續刷新了,需要重新登錄。指定在刷新令牌時要保留的聲明密鑰。為了使令牌無效,您必須啟用黑名單。指定用于對用戶進行身份驗證的提供程序。 showImg(https://segmentfault.com/img/remote/1460000012606251?w=1920&h=1280); ...
摘要:在開發中,用戶認證是核心,是數據是否有保障的前提,目前主要有兩種常用方式進行用戶認證和。為了學習在中的使用,最好的辦法就是在程序員同志網搜索有關插件,找個最多的那個拿來研究研究。 通過上一篇《學習 Lumen 用戶認證 (一)》https://mp.weixin.qq.com/s/KVUQE2DUetNB2kqxHs0VDg的學習,大致懂了 Lumen 的用戶認證主要使用 「api」的...
閱讀 3132·2021-10-12 10:11
閱讀 1836·2021-08-16 10:59
閱讀 2844·2019-08-30 15:55
閱讀 1224·2019-08-30 14:19
閱讀 2030·2019-08-29 17:03
閱讀 2463·2019-08-29 16:28
閱讀 3213·2019-08-26 13:47
閱讀 2880·2019-08-26 13:36