摘要:本文來自原文鏈接歡迎作客我們的學習群這個例子將引導你在中使用來創建用戶登錄和注冊的。是的簡稱,可以幫助我們創建用戶認證,以此連接前后端。
本文來自pilishen.com----原文鏈接; 歡迎作客我們的php&Laravel學習群:109256050
這個例子將引導你在laravel中使用JWT來創建用戶登錄和注冊的API。JWT是Json Web Token的簡稱,可以幫助我們創建用戶認證,以此連接前后端。
(一)安裝tymon/jwt-auth組件composer require tymon/jwt-auth
修改config/app.php
"providers" => [ .... "TymonJWTAuthProvidersJWTAuthServiceProvider", ], "aliases" => [ .... "JWTAuth" => "TymonJWTAuthFacadesJWTAuth" ],
發布JWT的配置文件,用以修改token過期時間等:
php artisan vendor:publish --provider="TymonJWTAuthProvidersJWTAuthServiceProvider"
生成jwt的秘鑰:
php artisan jwt:generate(二)創建api路由
在app/Http/routes.php中(示例用的是laravel 5.2,你也可以放到后期版本的api.php中)
Route::group(["middleware" => ["api","cors"],"prefix" => "api"], function () { Route::post("register", "APIController@register"); Route::post("login", "APIController@login"); Route::group(["middleware" => "jwt-auth"], function () { Route::post("get_user_details", "APIController@get_user_details"); }); });(三)創建CORS Middleware
這里的cors中間件,這是用來解決跨域請求默認被攔截的問題,如果不加就會有下面這個常見報錯:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at //test.com/api/register. (Reason: CORS header "Access-Control-Allow-Origin" missing).
所以:
php artisan make:middleware CORS
然后在app/Http/Middleware/CORS.php中:
namespace AppHttpMiddleware; use Closure; class CORS { public function handle($request, Closure $next) { header("Access-Control-Allow-Origin: *"); $headers = [ "Access-Control-Allow-Methods"=> "POST, GET, OPTIONS, PUT, DELETE", "Access-Control-Allow-Headers"=> "Content-Type, X-Auth-Token, Origin" ]; if($request->getMethod() == "OPTIONS") { return Response::make("OK", 200, $headers); } $response = $next($request); foreach($headers as $key => $value) $response->header($key, $value); return $response; } }
注冊中間件app/Http/Kernel.php:
namespace AppHttp; use IlluminateFoundationHttpKernel as HttpKernel; class Kernel extends HttpKernel { ... ... protected $routeMiddleware = [ ... "cors" => AppHttpMiddlewareCORS::class, ]; }(四)創建jwt-auth Middleware
php artisan make:middleware authJWT
然后app/Http/Middleware/authJWT.php
namespace AppHttpMiddleware; use Closure; use JWTAuth; use Exception; class authJWT { public function handle($request, Closure $next) { try { $user = JWTAuth::toUser($request->input("token")); } catch (Exception $e) { if ($e instanceof TymonJWTAuthExceptionsTokenInvalidException){ return response()->json(["error"=>"Token is Invalid"]); }else if ($e instanceof TymonJWTAuthExceptionsTokenExpiredException){ return response()->json(["error"=>"Token is Expired"]); }else{ return response()->json(["error"=>"Something is wrong"]); } } return $next($request); } }
然后app/Http/Kernel.php
namespace AppHttp; use IlluminateFoundationHttpKernel as HttpKernel; class Kernel extends HttpKernel { ... ... protected $routeMiddleware = [ ... "jwt-auth" => AppHttpMiddlewareauthJWT::class, ]; }(五)創建相應的Controller
在app/Http/Controllers/APIController.php中:
namespace AppHttpControllers; use IlluminateHttpRequest; use AppUser; use Hash; use JWTAuth; class APIController extends Controller { public function register(Request $request) { $input = $request->all(); $input["password"] = Hash::make($input["password"]); User::create($input); return response()->json(["result"=>true]); } public function login(Request $request) { $input = $request->all(); if (!$token = JWTAuth::attempt($input)) { return response()->json(["result" => "wrong email or password."]); } return response()->json(["result" => $token]); } public function get_user_details(Request $request) { $input = $request->all(); $user = JWTAuth::toUser($input["token"]); return response()->json(["result" => $user]); } }(六)前端測試API
這里你完全可以使用postman或者rest client等其他工具。
測試Register API:
$.ajax({ url: "http://learnl52.hd/api/register", dataType: "json", type: "POST", data: {"name":"HD","email":"test@gmail.com","password":"123456"}, success: function (data) { alert("user created successfully") } });
測試Login API:
$.ajax({ url: "http://learnl52.hd/api/login", dataType: "json", type: "POST", data: {"email":"test@gmail.com","password":"123456"}, success: function (data) { alert(data.result) } });
測試User Details API(這里的token是你Login api返回的token)
$.ajax({ url: "http://learnl52.hd/api/get_user_details", dataType: "json", type: "POST", data: {"token":your toke here}, success: function (data) { console.log(data) } });
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28354.html
摘要:如何做用戶認證根據文檔描述,提供用戶認證的接口,他的核心是看守器和提供器,看守器定義怎么認證用戶,提供器定義怎么檢索用戶。 最近的一個PHP項目,上一個項目是采用ThinkPHP來弄的,因為很早就聽說過Laravel的大名,所以進了Laravel的官網,意外發現了Lumen,正好我項目是提供API的,所以選擇了Lumen,因為是Laravel的精簡版,看了幾天的Laravel文檔,也總...
摘要:默認的時間為周。大概意思就是如果用戶有一個,那么他可以帶著他的過來領取新的,直到周的時間后,他便無法繼續刷新了,需要重新登錄。指定在刷新令牌時要保留的聲明密鑰。為了使令牌無效,您必須啟用黑名單。指定用于對用戶進行身份驗證的提供程序。 showImg(https://segmentfault.com/img/remote/1460000012606251?w=1920&h=1280); ...
摘要:之前我們已經準備好了基本的安裝過程現在我們去實現一下具體的業務部分用戶的登錄與注冊對于用戶注冊這對于一款應用來說再正常不過了為了接下來我們的效果我們可以去生成一個即在項目終端執行生成用戶之后我們暫時先不去編輯字段后面我們需要用到時再加返回字 之前我們已經準備好了基本的安裝過程 現在我們去實現一下具體的業務部分 用戶的登錄與注冊 對于用戶注冊 這對于一款應用來說再正常不過了 為了接下來...
摘要:擴展用戶認證系統上一節我們介紹了系統實現的一些細節知道了是如何應用看守器和用戶提供器來進行用戶認證的,但是針對我們自己開發的項目或多或少地我們都會需要在自帶的看守器和用戶提供器基礎之上做一些定制化來適應項目,本節我會列舉一個在做項目時遇到的 擴展用戶認證系統 上一節我們介紹了Laravel Auth系統實現的一些細節知道了Laravel是如何應用看守器和用戶提供器來進行用戶認證的,但是...
摘要:最近項目做認證,最終技術選型決定使用,項目框架使用的是,使用有比較方便使用的開源包。使用安裝,使用的框架版本為,最新穩定版本為。 最近項目做API認證,最終技術選型決定使用JWT,項目框架使用的是laravel,laravel使用JWT有比較方便使用的開源包:jwt-auth。 使用composer安裝jwt-auth,laravel使用的框架版本為5.0,jwt-auth最新穩定版本...
閱讀 1883·2021-11-22 09:34
閱讀 3009·2021-09-28 09:35
閱讀 13374·2021-09-09 11:34
閱讀 3594·2019-08-29 16:25
閱讀 2820·2019-08-29 15:23
閱讀 2035·2019-08-28 17:55
閱讀 2424·2019-08-26 17:04
閱讀 3044·2019-08-26 12:21