【问题标题】:Laravel using the wrong user providerLaravel 使用了错误的用户提供者
【发布时间】:2019-02-02 06:44:08
【问题描述】:

我们有两种类型的用户,“用户”,他们使用默认的 Laravel 身份验证脚手架;和“会员”,他们登录一个单独的网站,该网站设置了一个 cookie,我们从中读取他们的会员 ID 并使用单独的身份验证提供程序登录。

我无法复制的问题是,我们遇到了一个异常,该异常似乎是由使用了错误的用户提供程序触发的。 ExUserProvider retrieveByCredentials 方法获取用户名和密码,这是它不期望的,而不是它需要的唯一标识。现在我只是在记录缺少正确的信息。我可以从那里返回,但我不知道这是否会导致其他问题。 (特别是考虑到我无法复制它。)

下面的设置有什么明显的错误吗?您对如何尝试和复制此问题有任何想法吗?

身份验证服务提供者:

public function boot() {
    $this->registerPolicies();

    \Auth::provider('exdriver', function($app, array $config) {
        return new ExUserProvider();
    });
}

配置/auth.php

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

    'sso' => [
      'driver' => 'session',
      'provider' => 'ex',
    ],
],

... 

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],

    'exusers' => [
      'driver' => 'exdriver',
      'model' => App\ExUser::class,
    ],

],

ExUserProvider

public function retrieveByCredentials(array $parameters) {

    if(!isset($parameters['uniqueid'])) {
        \Log::info('No uniqueid set when retrieveByCredentials in ExUserProvider');
        \Log::info($parameters);
        // return;
    }
    $exUser = new ExUser($parameters['uniqueid'], $parameters);

    //store the user
    session(['exuser' => $exUser]);


    return $exUser;

}

/**
 * Validate credentials.
 *
 * @param Authenticatable $user
 * @param array $credentials username and password
 * @return bool
 */
public function validateCredentials(Authenticatable $user, array $credentials) {
    return TRUE;
}

/**
 * Retrieve stored user.
 *
 * @param type $identifier
 * @return string
 */
public function retrieveById($identifier) {
    return session('exuser', null);
}

public function retrieveByToken($identifier, $token) {

}

public function updateRememberToken(Authenticatable $user, $token) {

}

【问题讨论】:

    标签: php laravel authentication


    【解决方案1】:

    Welp,看起来有些用户一定有一个非常旧的身份验证 cookie 版本,其中没有他们的唯一 ID。清除他们的缓存使他们可以登录。永远不会想到这一点!

    【讨论】:

    • 你说的是哪个缓存?我遇到了同样的问题,在 auth.php 文件中,用户提供者是某个 Customer 类,但在生产中它使用的是 User 类......本地我没有这个问题,同一个分支......我'已经比较了文件并且它们是相同的(产品和本地分支)..
    猜你喜欢
    • 2017-04-15
    • 2013-10-07
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 2013-12-24
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多