首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel在所有api路由中使用web身份验证重定向到主页

Laravel在所有api路由中使用web身份验证重定向到主页
EN

Stack Overflow用户
提问于 2018-09-04 20:57:26
回答 2查看 12K关注 0票数 3

我想对所有api路由使用web身份验证。我创建了中间件,它看起来是这样的

代码语言:javascript
运行
复制
Route::group(['middleware' => ['auth:web'], 'prefix' => 'v1',], function ($router) {
   Route::apiResource('subscriptions', 'Api\SubscriptionController');
   Route::post('subscriptions/{id}/resend', 'Api\SubscriptionController@resend')->name('resend');
   Route::post('subscriptions/{id}/grace', 'Api\SubscriptionController@addGrace')->name('grace');
   Route::apiResource('accounts', 'Api\SocialMediaAccountController');
   Route::post('accounts/{id}/reset', 'Api\SocialMediaAccountController@reset');
Route::apiResource('customers', 'Api\CustomerController');
});

当我已经登录并尝试向api路由发出请求时,它会将我重定向到主页。我该如何解决这个问题呢?

下面是config/auth.php

代码语言:javascript
运行
复制
 'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],

    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],

如果我已经登录,我不希望api路由被重定向。我只想做网络授权,并继续相同的请求。

EN

回答 2

Stack Overflow用户

发布于 2019-04-18 03:38:11

只有两个更新来限制你的api路由,要求你的网络身份验证会话发出api请求。

apiweb.的

  1. 更新中间件

代码语言:javascript
运行
复制
# File: app/Providers/RouteServiceProvider.php

protected function mapApiRoutes()
    {
        Route::prefix('api')
             ->middleware('web') # <-- CHANGE to 'web'
             ->namespace($this->namespace."\\API")
             ->group(base_path('routes/api.php'));

    }

auth:api到(或简称auth) )的

  • 更新中间件

代码语言:javascript
运行
复制
# routes/api.php
Route::middleware('auth:web')->get('/user', function (Request $request) {
     return $request->user();
});
票数 9
EN

Stack Overflow用户

发布于 2018-09-04 21:28:11

在Laravel中,web路由和api路由有很多不同之处。最大的区别是默认包含的中间件。

您可以在app/Http/kernel.php中看到中间件组之间的区别:

代码语言:javascript
运行
复制
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],

API应该是无状态的,因此不会设置cookie和会话。由于api路由不会启动会话,因此您将无法使用经过身份验证的会话。

你可以设置你的路由来使用'web‘组,或者查看关于通过Javascript:https://laravel.com/docs/5.6/passport#consuming-your-api-with-javascript使用你自己的应用程序接口。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52166907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档