使用内置的 Laravel 5.2 身份验证并加载 SPA,然后为所有其他路由加载 Dingo API

Posted

技术标签:

【中文标题】使用内置的 Laravel 5.2 身份验证并加载 SPA,然后为所有其他路由加载 Dingo API【英文标题】:Use built in Laravel 5.2 auth and load SPA then Dingo API for all other routes 【发布时间】:2016-06-25 19:16:33 【问题描述】:

我正在尝试确定是否可以使用带有刀片/视图的常规 Laravel 身份验证路由进行基本身份验证,然后加载 SPA(带有自己的路由器的 Vue.js)并通过 Dingo 调用 API?

目前我在routes.php 的顶部有这个,它有效:

// All routes through web middleware
Route::group(['middleware' => 'web'], function () 

    // Authentication
    Route::auth();

    // Authenticated routes
    Route::group(['middleware' => 'auth'], function () 

        // Load main SPA
        Route::get('/', 'AppController@spa');

    );

);

app.domian.com/ 受 Auth 保护,这就是 SPA 使用的路由。我使用标准的内置 Laravel 身份验证页面(非 SPA),因此当用户登录或注册时,它允许访问主路由并加载 SPA。

我想做的是从现在开始使用 Dingo。所以对app.domian.com/api/*的调用都由Dingo处理。

我已将此添加到相同的路由文件中:

$api = app('Dingo\Api\Routing\Router');

$api->version('v1', function($api) 

    $api->group(['middleware' => 'auth'], function ($api) 

        // API prefix: api
        $api->get('user', function($api) 
            return Auth::user();
        );

    );

);

这似乎不起作用。

甚至可以以这种方式使用 Dingo,或者我必须放弃内置的 Auth 以获得 JWT 之类的东西。我希望将来能做到这一点,但现在我只需要让它发挥作用。

【问题讨论】:

【参考方案1】:

您需要在中间件中将auth 替换为api.auth

$api->group(['middleware' => 'api.auth'], function ($api) 

    // API prefix: api
    $api->get('user', function($api) 
        return Auth::user();
    );

);

【讨论】:

以上是关于使用内置的 Laravel 5.2 身份验证并加载 SPA,然后为所有其他路由加载 Dingo API的主要内容,如果未能解决你的问题,请参考以下文章

中间件身份验证不适用于 Web Laravel 5.2

laravel 5.2 身份验证 - 缺少链接

如何在 laravel 5.2 中使用多重身份验证 [关闭]

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

Laravel 5.2:如何在中间件中使用身份验证

Laravel 5.2 身份验证不起作用