我的登录代码应该通过尝试使用Laravel的Auth::attempt()
方法验证用户来工作。此代码适用于我的另一个站点,我将其更改为而不是数据库中的Password
,它存储为passwdEncrypted
。我无法更改它,因为数据库也被另一个应用程序使用。
代码如下:
// check if in database
$isInDb = User::where('ReferenceCode', $username)->first();
if($isInDb) {
// is in database
// check if password is encrypted yet
if($isInDb->passwdEncrypted) {
// password is encrypted
if(Auth::attempt(array('ReferenceCode' => $username, 'passwdEncrypted' => $password))) {
// authenticated
$array = array();
$array['verified'] = 'true';
$array['type'] = Auth::user()->UserType;
return Response::json($array);
} else {
// not authenticated
$array = array();
$array['verified'] = 'false';
$array['type'] = $type;
return Response::json($array);
}
} else {
// password is not encrypted
// check if plain text password is correct
if($isInDb->Password == $password) {
// plain text password is correct
$hashed = Hash::make($password);
$arr = array('passwdEncrypted' => $hashed);
$updated = User::where('rsmsOnlineUserID', $isInDb->rsmsOnlineUserID)->update($arr);
if($updated) {
$newUser = User::find($isInDb->rsmsOnlineUserID);
echo $newUser->passwdEncrypted;
if(Auth::attempt(array('ReferenceCode' => $username, 'passwdEncrypted' => $password))) {
echo 'logged in';
} else {
dd(DB::getQueryLog());
echo 'could not log in';
}
} else {
echo 'did not update';
}
} else {
// plain text password is incorrect
$array = array();
$array['verified'] = 'false';
$array['type'] = $type;
return Response::json($array);
}
}
} else {
// not in database
return Respone::json(array('success' => 'false'));
}
发生了什么:我无法登录,数据库中的用户名和密码是1234
,即使我硬编码,它也不起作用。
它首先检查用户是否在数据库中,如果是,则检查是否有加密密码,如果没有,如果匹配纯文本,它将从给定的密码创建一个密码数据库中的密码,然后登录用户(我别无选择,只能将纯文本密码存储在数据库中,这就是他们想要的方式)。
但它会从代码的{"verified":"false","type":"prospective_employee"}
部分返回not authenticated
。所以Auth::attempt()
块都不起作用。
我手动记录它们,但即使Auth::login()
也无效。
我的User
模型(主数据库表)中有以下内容:
public function getAuthPassword()
{
return $this->Password;
}
/**
* Get the token value for the "remember me" session.
*
* @return string
*/
public function getRememberToken() {
return $this->remember_token;
}
public function setRememberToken($value) {
$this->remember_token = $value;
}
public function getRememberTokenName() {
return 'remember_token';
}
/**
* Get the e-mail address where password reminders are sent.
*
* @return string
*/
public function getReminderEmail()
{
return $this->email;
}
请注意,表格中有一个名为Password
的字段,但这是纯文本密码,我需要对passwdEncrypted
字段进行身份验证。
答案 0 :(得分:0)
你无法用Laravel做到这一点,并且有充分的理由,但这是非常不安全和危险的。
我别无选择,只能将明文密码存储在 数据库,这就是他们想要的方式
我不明白 - 为什么你要存储一个"未加密的"和#34;加密"密码?无关紧要。您应该只存储加密密码。不需要任何其他方式,你需要教育人们为什么。
此代码适用于我的另一个网站,我已将其更改为相反 在数据库中的密码,它存储为passwdEncrypted。一世 因为数据库正在被另一个应用程序使用,所以无法更改它 好。
Laravel Auth代码经过硬编码,可以使用"密码"柱。您不能简单地将其更改为另一个列。这就是你的代码失败的原因。
由于您没有使用密码列,并且由于您没有使用加密密码,因此您可以创建自己的不安全登录系统,并根据您的要求进行自定义。