首页 > 解决方案 > 尝试登录时有没有办法检查“adminPassword”?

问题描述

问题是如果我使用adminPassword数据库中的值,我的登录将无法通过。

最初,用户登录后,将提示他们更改默认密码。

我们被问到为什么我的帐户无法访问这个和那个的问题。

由于他们更改了密码,我们无法在更新其角色后检查他们是否已经拥有访问权限。

所以,我的目标是放置一个adminPassword我可以登录他们的帐户并检查它是否已经可以访问的地方 - 他们的访问权限。

我试图覆盖attemptlogin. 首先是使用andif检查凭据是否正确。(正常登录)passwordemail

如果没有找到具有该password值的用户,则下一步是检查adminPassword. (类似管理员的登录)我似乎无法解决这个问题。

protected function attemptLogin(Request $request)
{
    if($this->guard()->attempt($this->credentials($request), $request->has('remember')))
    {
        return true;
    }

    $email = request('email');
    dump($email);
    $password = request('password');
    dump($password);

    if(Auth::attempt(['email' => $email, 'adminPassword' => $password]))
    {
        return true;
    }


    // $credentials = array(['email' => $this->credentials($request)['email'], 'adminPassword' => \Hash::make($this->credentials($request)['password'])]);

    // return $this->guard()->attempt(
    //     reset($credentials), $request->has('remember')
    // );
}

实际结果是使用 adminPassword 时仍然可以登录。

标签: laravel

解决方案


Hash::check()我在对数据库上的密码值和散列密码使用方法后,通过手动记录用户来解决它。

/**
 * Attempt to log the user into the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return bool
 */
protected function attemptLogin(Request $request)
{
    if($this->guard()->attempt($this->credentials($request), $request->has('remember')))
        return true;

    $user = User::where('email', request('email'))->first();
    if($user) {
        if(\Hash::check(request('password'), $user->adminPassword)) {
            Auth::login($user);
            session()->put('justAdmin', true);

            return true;
        }
    }

    return false;
}

推荐阅读