gpt4 book ai didi

php - Laravel 4 Auth::attempt 在正确的值上返回 false

转载 作者:行者123 更新时间:2023-11-30 22:58:38 26 4
gpt4 key购买 nike

我的登录代码应该可以通过尝试使用 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,即使我硬编码,它也不起作用。

它首先检查用户是否在数据库中,如果是,它检查是否有加密密码,如果没有,如果与明文匹配,它将根据给定的密码创建一个数据库中的密码,然后让用户登录(我别无选择,只能将明文密码存储在数据库中,这就是他们想要的方式)。

但它从代码的 not authenticated 部分返回 {"verified":"false","type":"prospective_employee"}。所以 Auth::attempt() block 都不起作用。

我正在手动登录它们,但即使 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字段进行身份验证。

最佳答案

你不能用 Laravel 做到这一点,这是有充分理由的,但它是非常不安全和危险的。

I have no choice but to have the plain text password stored in the database, that is how they want it

我不明白 - 为什么要同时存储“未加密”和“加密”密码?无关紧要。您应该只存储加密密码。不需要任何其他方式,您需要教育人们了解原因。

This code works on another site of mine, I have altered it as instead of the Password in the database, it is stored as passwdEncrypted. I cannot change it as the database is in use by another application as well.

Laravel 授权代码被硬编码为使用“密码”列。您不能简单地将其更改为另一列。这就是您的代码失败的原因。

由于您没有使用密码列,也没有使用加密密码,您不妨创建自己的不安全登录系统,并根据您的要求进行定制。

关于php - Laravel 4 Auth::attempt 在正确的值上返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25087916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com