【问题标题】:TokenGuard class always need api_tokenTokenGuard 类总是需要 api_token
【发布时间】:2017-07-01 01:28:55
【问题描述】:

我正在使用 AngularJs 和 Laravel 5.4

在默认守卫中,我将web guard 更改为api。最后如下图。

'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],

当我使用来自 Angular Js 的用户名和密码发送请求时......我总是得到无效的凭据,因为......

TokenGuard 类有一个名为 validate 的方法,它需要 api_token 值,但我在登录页面上。

我假设为了获得令牌,我需要在登录方法中使用$this->guard(web)

这是正确的方法还是我错过了什么?

【问题讨论】:

    标签: laravel laravel-5.2 laravel-5.1 laravel-5.3 laravel-5.4


    【解决方案1】:

    默认情况下,routes/api.php 中定义的所有路由都具有app/Providers/RouteServiceProvider::mapApiRoutes() 中定义的api 中间件。因此,您始终需要传递 api_token。

    您可以做的是,在您的 api 路由中,像这样定义登录路由

    Route::post('login', 'api\AuthController@login'); //out of the group
    

    从 AngularJS 发帖

    $http.post({
        url: 'http://localhost/api/login',
        data: $scope.userda,
        headers: {
            Authorization: ''
        }
    }).then(...)
    

    然后用auth:api定义一个组中的所有其他路由

    Route::group(['middleware' => 'auth:api'], function(){
        //Other routes here
    });
    

    在 Angular 中,将 Authorization 标头设置为 api_token。所以登录前为空,登录后为用户 api_token 的值。

    【讨论】:

    • 您在这里的报价中缺少单引号auth:api,其次是如何将登录路由包装在 auth:api 中间件中?令牌目前不存在。我需要在我的登录页面中使用用户名和密码的令牌。只有这样我才能使用令牌进行进一步的调用。如果您需要有关我的问题的更多信息,请告诉我。
    • 我的登录路径在群外。
    • 如何使用TokenGuard 登录? TokenGuard 类有一个需要令牌的 Validate 方法......但是我的登录请求尚未获取令牌。我的意思是,你将在控制器的登录方法中写什么来从 tokenguard 验证用户名和密码?
    • 哦,现在我明白你的意思了。在routes/web.php 中定义您的登录路径。您将可以访问正常的身份验证。然后从那里返回 Json() 以及所有用户详细信息。而所有的路由,都经过api进行TokenGuard认证。
    • 为什么是网络卫士?为什么不是 api 守卫?不能用api guard登录吗?
    猜你喜欢
    • 2018-01-01
    • 2012-11-02
    • 2011-02-09
    • 2012-07-21
    • 2013-03-08
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多