我想对所有api路由使用web身份验证。我创建了中间件,它看起来是这样的
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
'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路由被重定向。我只想做网络授权,并继续相同的请求。
发布于 2019-04-17 19:38:11
只有两个更新来限制你的api路由,要求你的网络身份验证会话发出api请求。
从api
到web
.的
# 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
) )的
# routes/api.php
Route::middleware('auth:web')->get('/user', function (Request $request) {
return $request->user();
});
发布于 2018-09-04 13:28:11
在Laravel中,web路由和api路由有很多不同之处。最大的区别是默认包含的中间件。
您可以在app/Http/kernel.php中看到中间件组之间的区别:
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使用你自己的应用程序接口。
https://stackoverflow.com/questions/52166907
复制