使用mongodb重置Laravel密码

时间:2018-05-30 10:41:33

标签: laravel laravel-5 laravel-5.5

我正在将旧项目(在zend框架中完成)迁移到laravel 5.5。数据库是mongo db。我正在使用laravel-mongodb连接laravel和mongo。

我已经覆盖了laravel登录功能,因为表字段与默认的laravel字段不同。登录工作正常。

目前,当我尝试重置密码时,我收到错误消息"我们无法找到具有该电子邮件地址的用户"。如何覆盖重置密码功能?

在用户表中,字段名称为usrEmail和usrPassword。登录的工作代码如下。

目前,当我尝试重置密码时,我收到错误消息We can't find a user with that e-mail address.如何覆盖重置密码功能?

在用户表格中,字段名称为usrEmailusrPassword。登录的工作代码如下。

LoginController.php

protected function attemptLogin(Request $request)
    {
        $authUser     = User::where('usrEmail', $request->email)
            ->whereIn('usrlId', [1, 2, 5, 6])
            ->first();

        if($authUser) {
            $password = md5(env('MD5_Key'). $request->password. $authUser->usrPasswordSalt);
            $user     = User::where('usrEmail', $request->email)
                ->where('usrPassword', $password)
                ->where('usrActive', '1')
                ->where('usrEmailConfirmed', '1')
                ->where('is_delete', 0)
                ->where('usrlId', 2)
                ->first();

            if ($user) {
                $updateLoginTime            = User::find($user->_id);
                $updateLoginTime->lastlogin = date('Y-m-d H:i:s');
                $updateLoginTime->save();

                $this->guard()->login($user, $request->has('remember'));
                return true;
            }
            else {
                return false;
            }
        }

        return false;
    }

1 个答案:

答案 0 :(得分:0)

尝试将其放入您的Auth/ResetsPasswordController.php

protected function credentials(Request $request)
{
    $data = $request->only(
        'password', 'password_confirmation', 'token'
    );

    $data['usrEmail'] = $request->get('email');

    return $data;
}

默认情况下,->only(还包括email字段,但是由于它在数据库中是不同的,因此我们需要覆盖此功能,该功能默认情况下是在ResetsPasswords特性中定义的。

这应该确保密码重设流程中的任何email字段(在单击电子邮件链接后,在请求电子邮件和表单时)都指向数据库中的正确字段。