Laravel + React,使用 Laravel 身份验证的 api

Posted

技术标签:

【中文标题】Laravel + React,使用 Laravel 身份验证的 api【英文标题】:Laravel + React, consume api with Laravel authentication 【发布时间】:2019-03-15 22:07:59 【问题描述】:

我们有一个以 react 作为前端的 Laravel 项目。 react基本上是在laravel项目里面,我们用php artisan preset react来添加的。

由于此应用程序需要身份验证,我们使用自定义 laravel 身份验证来授予用户访问权限。然后当身份验证正确时,我们将用户重定向到将由 react 和 react 路由器管理的路由。 问题是我们需要从同一个应用程序中使用我们的 API 端点,并且这些端点必须受到保护。 laravel Auth 在那里不起作用,会话信息没有在每个请求上发送。我试过https://laravel.com/docs/5.7/authentication#stateless-http-basic-authentication虽然解决了登录不方便的问题,然后当想消耗另一个资源时提示再次登录。也不能将 api 路由更改为 Web 中间件。

有人知道如何使用普通的 laravel 身份验证来保护 laravel API 路由

【问题讨论】:

【参考方案1】:

解决方案很简单,即使是documentation,也应该明确必要的步骤。

我们需要:

    添加护照composer require laravel/passport 进行迁移php artisan migrate 安装护照php artisan passport:install

第四步比较复杂。我们需要打开我们的 User.php 模型文件。首先我们需要导入 HasApiTokens 并告诉模型使用它。

use Laravel\Passport\HasApiTokens;

class User extends Authenticatable



    use HasApiTokens, Notifiable;

    .......


然后在我们的config/auth.php上我们需要修改api数组,把驱动改成passport

'api' => [

    //for API authentication with Passport

    'driver' => 'passport',

    'provider' => 'users',

],

然后在我们的 app/Http/Kernel.php 上,我们需要在 web 键中的 $middlewareGroups 数组中添加一个中间件。

protected $middlewareGroups = [

    'web' => [

        ................

        //for API authentication with Passport

        \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,

    ],

现在我们可以在我们的 api 路由上使用 auth:api 中间件。

Route::middleware('auth:api')->group( function()
    ...your routes here
);

【讨论】:

【参考方案2】:

在 routes/api.php 中定义的路由默认是无状态的。他们不使用会话。

如果您想利用经过身份验证的会话,则必须添加必要的中间件,例如 StartSession::class'auth'。您可以在路由组中执行此操作,也可以在 app/Http/Kernel.php 中的 $middlewareGroups['api'] 数组中执行此操作。

【讨论】:

以上是关于Laravel + React,使用 Laravel 身份验证的 api的主要内容,如果未能解决你的问题,请参考以下文章

Larave使用composer安装无反应,提示“Changed current directory to C:/Users/Administrator/AppData/Roaming/Compose

Larave使用composer安装无反应,提示“Changed current directory to C:/Users/Administrator/AppData/Roaming/Compose

laravel框架(blade模板引擎)

laravel框架总结 -- blade模板引擎

larave Elasticsearch scout Unsupported operand types报错

larave Elasticsearch scout Unsupported operand types报错