Laravel通过传统的登录表单已经让用户认证变得很简单,但是API怎么办?API通常使用token进行认证并且在请求之间不维护session状态。Laravel使用Laravel Passport让API认证变得轻而易举,Passport基于Alex Bilbie维护的League OAuth2 server,可以在数分钟内为Laravel应用提供完整的OAuth2服务器实现。

中文文档

http://laravelacademy.org/post/6813.html

安装

composer require laravel/passport

接下来,在配置文件 config/app.php 的providers 数组中注册 Passport 服务提供者:

LaravelPassportPassportServiceProvider::class,

Passport 迁移将会为应用生成用于存放客户端和访问令牌的数据表 (迁移文件位置/vendor/laravel/passport/database)

php artisan migrate

创建生成安全访问令牌时用到的加密密钥及私人访问和密码访问客户端。

php artisan passport:install

Trait 添加到 AppUser 模型中,这个 Trait 会给这个模型提供一些辅助函数,用于检查已认证用户的令牌和使用作用于。

LaravelPassportHasApiTokens

然后在 AuthServiceProvider 的 boot 方法中添加 Passport::roues();

最后,修改文件 config/auth.php 中 api 部分的授权保护项( driver )改为 passport 。此调整会让你的应用程序在接收到 API 的授权请求时使用 Passport 的 TokenGuard 来处理

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

增加测试路由

Route::group(["namespace" => "api"], function () {  Route::post("/login", "UserController@login");});Route::group(["middleware" => "auth:api", "namespace" => "api"], function() {  Route::get("V1/test/passport", "UserController@passport");});

增加控制器

php artisen make:controller UserController
<?phpnamespace AppHttpControllersApi;use IlluminateHttpRequest;use AppHttpControllersController;use Auth;class UserController extends Controller{  public function __construct()  {    $this->content = array();  }  public function login()  {    // dd(request("name"));    if(Auth::attempt(["name" => request("name"), "password" => request("password")]))    {      $user = Auth::user();      $this->content["token"] = $user->createToken("Pi App")->accessToken;      $status = 200;    } else {      $this->content["error"] = "未授权";       $status = 401;    }     return response()->json($this->content, $status);  }  public function passport()  {    return response()->json(["user" => Auth::user()]);  }}

通过postman进行简单测试获取token

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持网页设计。