Laravel Passport 构建 API 身份验证和授权

Laravel Passport 构建 API 身份验证和授权

第一步

执行以下命令:

composer require laravel/passportphp artisan migratephp artisan passport:install

第二步

修改 config/auth.php 文件中的 Gurds:

...    'guards' => [        'web' => [            'driver' => 'session',            'provider' => 'users',        ],        'api' => [            'driver' => 'passport',            'provider' => 'users',        ],    ],...

第三步

app/User.php

 'datetime',    ];}

第四步

app/Repositories/User/UserRepositoryInterface.php

<?phpnamespace AppRepositoriesUser;use IlluminateHttpRequest;interface UserRepositoryInterface {    public function register(Request $request);    public function login(Request $request);    public function refreshToken(Request $request);    public function details();    public function logout(Request $request);    public function response($data, int $statusCode);    public function getTokenAndRefreshToken(string $email, string $password);    public function sendRequest(string $route, array $formParams);    public function getOClient();}

第五步

创建 app/Repositories/User/UserRepository.php 文件

http = $client;    }    public function register(Request $request) {        $email = $request->email;        $password = $request->password;        $input = $request->all();        $input['password'] = bcrypt($input['password']);        User::create($input);        $response = $this->getTokenAndRefreshToken($email, $password);        return $this->response($response["data"], $response["statusCode"]);    }    public function login(Request $request) {        $email = $request->email;        $password = $request->password;        if (Auth::attempt(['email' => $email, 'password' => $password])) {            $response = $this->getTokenAndRefreshToken($email, $password);            $data = $response["data"];            $statusCode =  $response["statusCode"];        } else {            $data = ['error'=>'Unauthorised'];            $statusCode =  self::UNAUTHORISED_STATUS_CODE;        }        return $this->response($data, $statusCode);    }    public function refreshToken(Request $request) {        if (is_null($request->header('Refreshtoken'))) {            return $this->response(['error'=>'Unauthorised'], self::UNAUTHORISED_STATUS_CODE);        }        $refresh_token = $request->header('Refreshtoken');        $Oclient = $this->getOClient();        $formParams = [ 'grant_type' => 'refresh_token',                        'refresh_token' => $refresh_token,                        'client_id' => $Oclient->id,                        'client_secret' => $Oclient->secret,                        'scope' => '*'];        return $this->sendRequest("/oauth/token", $formParams);    }    public function details() {        $user = Auth::user();        return $this->response($user, self::SUCCUSUS_STATUS_CODE);    }    public function logout(Request $request) {        $request->user()->token()->revoke();        return $this->response(['message' => 'Successfully logged out'], self::SUCCUSUS_STATUS_CODE);    }    public function response($data, int $statusCode) {        $response = ["data"=>$data, "statusCode"=>$statusCode];        return $response;    }    public function getTokenAndRefreshToken(string $email, string $password) {        $Oclient = $this->getOClient();        $formParams = [ 'grant_type' => 'password',                        'client_id' => $Oclient->id,                        'client_secret' => $Oclient->secret,                        'username' => $email,                        'password' => $password,                        'scope' => '*'];        return $this->sendRequest("/oauth/token", $formParams);    }    public function sendRequest(string $route, array $formParams) {        try {            $url = self::BASE_URL.$route;            $response = $this->http->request('POST', $url, ['form_params' => $formParams]);            $statusCode = self::SUCCUSUS_STATUS_CODE;            $data = json_decode((string) $response->getBody(), true);        } catch (ClientException $e) {            echo $e->getMessage();            $statusCode = $e->getCode();            $data = ['error'=>'OAuth client error'];        }        return ["data" => $data, "statusCode"=>$statusCode];    }    public function getOClient() {        return OClient::where('password_client', 1)->first();    }}

第六步

app/Http/Requests/UserLoginRequest.php

零一万物开放平台 零一万物开放平台

零一万物大模型开放平台

零一万物开放平台 36 查看详情 零一万物开放平台

 'required|email',            'password' => 'required',          ];    }    protected function failedValidation(Validator $validator) {        throw new HttpResponseException(response()->json($validator->errors(), self::UNPROCESSABLE_ENTITY));    }}

第七步

app/Http/Requests/UserRegisterRequest.php

 'required',            'email' => 'required|email|unique:users',            'password' => 'required',            'c_password' => 'required|same:password',          ];    }    protected function failedValidation(Validator $validator) {        throw new HttpResponseException(response()->json($validator->errors(), self::UNPROCESSABLE_ENTITY));    }}

第八步

app/Providers/AppServiceProvider.php

app->bind(UserRepositoryInterface::class, UserRepository::class);    }    /**     * Bootstrap any application services.     *     * @return void     */    public function boot() {        //    }}

第九步

app/Providers/AuthServiceProvider.php

 'AppPoliciesModelPolicy',    ];    /**     * Register any authentication / authorization services.     *     * @return void     */    public function boot() {        $this->registerPolicies();        Passport::routes();    }}

第十步

app/Http/Controllers/UserController.php

userRepository = $userRepository;    }    public function login(UserLoginRequest $request) {        $response = $this->userRepository->login($request);        return response()->json($response["data"], $response["statusCode"]);    }    public function register(UserRegisterRequest $request) {        $response = $this->userRepository->register($request);        return response()->json($response["data"], $response["statusCode"]);    }    public function details() {        $response = $this->userRepository->details();        return response()->json($response["data"], $response["statusCode"]);    }    public function logout(Request $request) {        $response = $this->userRepository->logout($request);        return response()->json($response["data"], $response["statusCode"]);    }    public function refreshToken(Request $request) {        $response = $this->userRepository->refreshToken($request);        return response()->json($response["data"], $response["statusCode"]);    }}

第十一步

routes/api.php

 ['auth:api']], function () {    Route::post('logout', 'UserController@logout');    Route::post('details', 'UserController@details');});

推荐教程:《Laravel教程》

以上就是Laravel Passport 构建 API 身份验证和授权的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/859105.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
曙光重临橙色宠物排名
上一篇 2025年11月27日 21:51:07
SQL 子查询返回多列怎么办?
下一篇 2025年11月27日 21:51:08

相关推荐

发表回复

登录后才能评论
关注微信