【发布时间】: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