【发布时间】:2017-11-26 09:32:28
【问题描述】:
我已经开始处理现有的 Laravel 5.2 项目。我需要为应用程序的前端构建一些基本的 API 请求以与数据库通信。这些路由需要经过用户会话的认证。
我尝试使用 auth:api 驱动程序设置中间件,并在 ../config/auth.php 中将 api['driver'] 设置为 'session'。但是,即使用户已通过所有权限和角色的身份验证,我仍会不断收到 302 重定向到登录页面。
有人可以推荐一些关于如何基于用户会话实现API身份验证的阅读或其他解决方案吗?
来自路由/api.php:
Route::group(["middleware" => ["auth:api"]], function () {
// results in 302 redirect to /login
Route::get('test', function(){
return "TEST";
});
});
来自配置/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'session',
'provider' => 'users',
],
app/Http/Kernel.php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\NoCache::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'role' => \Zizaco\Entrust\Middleware\EntrustRole::class,
'permission' => \Zizaco\Entrust\Middleware\EntrustPermission::class,
'ability' => \Zizaco\Entrust\Middleware\EntrustAbility::class,
'dashboard' => \App\Http\Middleware\dashboardMiddleware::class,
'system' => \App\Http\Middleware\systemMiddleware::class
];
}
【问题讨论】:
-
发布您的代码示例。听起来中间件可能设置不正确。可能是你的路由层次结构有点混乱
-
@JackGal 我已经为你添加了代码副本。
-
您是否尝试从浏览器访问此类路由?
-
@JackGal 我尝试从浏览器访问,但我认为需要标题“Accept-Encoding application/json”,所以我还将浏览器请求复制为 curl,导入邮递员,并将该标头更改为上面(使用此方法复制 cookie 文件)。 302 重定向到“/login”也会出现同样的问题。
-
好的.. 你可以在你的内核类中包含你的中间件组的一部分吗?我想看看你的设置是否正确
标签: php laravel authentication laravel-5.2