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