【问题标题】:Auth::user(); doesn't returns users, using passport验证::用户();不返回用户,使用护照
【发布时间】:2019-07-03 02:03:38
【问题描述】:

我有关于从数据库返回用户的情况。在我的控制器中,我正在尝试如下:

更新:

注意:为了明确的误解。实际上我以用户身份登录。那部分没问题。但看起来 auth:: 不明白这一点,当我尝试检索用户时。它正在将我重定向到登录的端点...

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;

class UsersController extends Controller
{
    public function getUser(){

        $users = Auth::user();
        dd($users);
    }
}

关于api路由:

Route::group(['middleware' => 'auth:api'], function() {

    Route::post("logout", "Api\AuthController@logout");

    /* User */
    Route::get('/user', 'Api\UsersController@getUser');

});


Route::group(["prefix" => "v1"], function(){

    /* Auth */
    Route::post("login", "Api\AuthController@login")->name("login");
    Route::post("register", "Api\AuthController@register");

});

事情就是这样。如果我在中间件:api 之外使用我的 UserController 路由,则端点返回 null。如果在中间件中使用它,它会将我重定向到我的登录端点。因为"->name('login')"

最终我无法返回用户。此外,这就是 config/auth 的样子。

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

顺便问一下。我试图将警卫的网络更改为 api,但没有任何改变。

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

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

有没有人对这种情况有更好的理解。如何使用护照返回用户?我在这里错过了什么吗?

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    显然,问题出在请求标头上。只有登录的用户才能调用/api/user 端点,并在请求标头中使用access_token

    请求头会有这对

    Authorization: Bearer eyJ0eXAiOiJKV1..........
    

    在 laravel 部分无事可做,因为它按预期工作。

    【讨论】:

    • 哦,对不起,我有那个供应商。这是 laravel 的默认值... :) 我只是认为我不应该把它也提出问题...
    • 我明白了。能否请您发布您的获取请求详细信息。由于/user在auth中间件下,需要先进行身份验证,并在subsequest请求中使用身份验证密钥。
    • 好的,我在问题的底部更新了它。这是 laravel 的默认设置。而且我不太确定如何自定义它或者我需要吗?
    • class Authenticate 是 laravel 框架的默认中间件,你不应该更新它。如果您需要一些其他中间件,您可以创建并放入app/Http/Middleware
    • 那么,我该如何解决这种情况呢?有什么想法吗?为什么它将我重定向到登录的端点?这真是麻烦……
    【解决方案2】:

    如果你使用 Laravel Passport。让我们在文档中阅读并使您的步骤相同:https://laravel.com/docs/5.8/passport

    从您的 API 请求中,需要将 access_token 传递给后端。

    希望你能解决这个问题!

    【讨论】:

    • 首先,我认为这应该是评论而不是答案。如果您更清楚“将 access_token 传递给后端”。会很好的。
    • 首先,请尝试在 Laravel 文档中使用相同的护照。他们说得很清楚,并将您的 access_token 放在 api 请求的标头中。
    猜你喜欢
    • 2019-12-21
    • 2016-03-12
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2016-12-14
    • 2017-08-12
    • 1970-01-01
    相关资源
    最近更新 更多