由用户会话验证的Laravel API路由

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由用户会话验证的Laravel API路由相关的知识,希望对你有一定的参考价值。

我已经开始研究现有的Laravel 5.2项目了。我需要为应用程序的前端构建一些基本的API请求来与数据库通信。这些路由需要由用户的会话进行身份验证。

我尝试使用auth:api驱动程序设置中间件,并在../config/auth.php中将api ['driver']设置为'session'。但是,即使用户使用所有权限和角色进行身份验证,我仍然会将302重定向到登录页面。

有人可以推荐一些关于如何基于用户会话实现API身份验证的阅读或其他解决方案的想法吗?

来自routes / api.php:

Route::group(["middleware" => ["auth:api"]], function () {
    // results in 302 redirect to /login
    Route::get('test', function(){
        return "TEST";
    });    

});

来自config / auth.php

'guards' => [
'web' => [
    'driver' => 'session',
    'provider' => 'users',
],

'api' => [
    'driver' => 'session',
    'provider' => 'users',
],

应用程序/ HTTP / Kernel.php

<?php

namespace AppHttp;

use IlluminateFoundationHttpKernel 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 = [
        IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,
        AppHttpMiddlewareNoCache::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            AppHttpMiddlewareEncryptCookies::class,
            IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
            IlluminateSessionMiddlewareStartSession::class,
            IlluminateViewMiddlewareShareErrorsFromSession::class,
            AppHttpMiddlewareVerifyCsrfToken::class,
            IlluminateRoutingMiddlewareSubstituteBindings::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' => AppHttpMiddlewareAuthenticate::class,
        'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
        'bindings' => IlluminateRoutingMiddlewareSubstituteBindings::class,
        'can' => IlluminateAuthMiddlewareAuthorize::class,
        'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
        'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class,
        'role' => izacoEntrustMiddlewareEntrustRole::class,
        'permission' => izacoEntrustMiddlewareEntrustPermission::class,
        'ability' => izacoEntrustMiddlewareEntrustAbility::class,
        'dashboard' => AppHttpMiddlewaredashboardMiddleware::class,
        'system' => AppHttpMiddlewaresystemMiddleware::class
    ];
}
答案

问题是您没有在请求中传递任何身份验证标头,因此,很明显它会将您重定向到登录屏幕,即使您使用邮递员访问API也是如此。

要证明这一点,请尝试从路由文件中的以下行auth中删除Route::group(["middleware" => ["auth:api"]], ...中间件,如果您点击测试路线,您应该能够获得TEST作为响应。此外,请记住,我们的api会自动将api /前缀绑定到所有api路由。因此,你应该向/api/test提出请求,你应该回来测试。

如果你想在你的api中加入auth,请阅读Laravel's Passport docs。如果你想要更简单的东西,请从docs中的onceBasic Auth中间件开始。

我希望这能以正确的方式指出你!

如果您有任何其他问题,请告诉我。

干杯!

以上是关于由用户会话验证的Laravel API路由的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 5.2 中使用默认身份验证路由对用户进行身份验证后设置会话数据

如何让会话在 Laravel api 路由中工作?

任何想法如何使用 vue js 和 vue 路由器在 laravel 5.3 中进行基于会话的身份验证

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

来自 laravel 会话登录的经过身份验证的 api 调用。可能吗?

Laravel 中是不是有任何方法可以在外部 API 中验证用户并将其保存到本地会话,以便我可以使用所有 User:: 和 Auth:: 函数?