我们有一个Laravel项目,反应作为前端。基本上反应是在laravel项目内部,我们使用php artisan preset react
来添加它。
由于此应用程序需要身份验证,我们使用自定义laravel auth来授予用户访问权限。然后,当身份验证正确时,我们会将用户重定向到将由react和react路由器管理的路由。问题是我们需要从同一个应用程序中使用我们的API端点,并且这些端点必须受到保护。 laravel Auth不在那里工作,每次请求都没有发送sessión信息。我已经尝试过https://laravel.com/docs/5.7/authentication#stateless-http-basic-authentication,虽然它解决了问题但是不方便登录然后当想要消耗另一个资源时显示再次登录的提示。也无法将api路由更改为Web中间件。
有人知道如何使用正常的laravel身份验证来保护laravel API路由
在routes / api.php中定义的路由默认是无状态的。他们不使用会话。
如果要利用经过身份验证的会话,则必须添加必要的中间件,如StartSession::class
和'auth'
。您可以在路由组中执行此操作,也可以在app / Http / Kernel.php中的$middlewareGroups['api']
数组中执行此操作。
解决方案很简单,即使是在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
上,我们需要在密钥$middlewareGroups
中的web
数组中添加一个中间件。
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
});