这花了一段时间,但我想出了如何使用自定义用户表成功验证Laravel 5.3中的用户,该表具有自定义用户名和密码字段。
我需要更改我的用户模型:
protected $table = 'Contact';
protected $primaryKey = 'ContactId';
public function getAuthPassword()
{
return $this->New_hashedpassword;
}
LoginController Http\Controllers\Auth\LoginController。php:
public function username()
{
return 'EMailAddress1';
}
为了进行测试,我还更改了LoginController中的重定向:
protected function redirectTo()
{
dd(Auth::user());
}
成功登录后,将正确的用户模型传递给浏览器。
我现在面临的唯一问题是,这个自定义表使用MSSQL uniqueidentifier作为主键。现在,当我调用Auth::user()时-
[SQL Server]Operand type clash: uniqueidentifier is incompatible with int (SQL: select top 1 * from [Contact] where [Contact].[ContactId] = 7164)
由于某种原因,该用户的实际ContamtID(它是字符串07164BAE-33AE-E511-AE88-000C29C93884)被转换为int,导致7164。
我不明白为什么LoginController可以毫无问题地访问Auth::user(),但是应用程序中的任何其他地方访问Auth::user()都会抛出错误。
蒂娅,沃特
编辑
当我按照Jeff的建议编辑我的User模型时,通过添加getAuth标识符并对我的测试用户的UUID进行硬编码,可以成功访问Auth::user()对象。但是,我如何告诉Laravel转换为一个字符串,而不是一个整数?
public function getAuthIdentifier()
{
//return $this->ContactId;
return '07164BAE-33AE-E511-AE88-000C29C93884';
}
我找到了答案。诀窍是通过将主键的自动增量添加到用户模型中,消除主键的自动增量,让Laravel知道主键字段的类型为string:
protected $table = 'Contact';
protected $primaryKey = 'ContactId';
public $incrementing = false;
正在尝试在用户模型中覆盖此方法
/**
* Get the unique identifier for the user.
*
* @return mixed
*/
public function getAuthIdentifier()
{
return $this->ContactId;
}
注:此方法是“可验证”特征的一部分。
让我知道这是否适合你。