首页 > 解决方案 > 尝试登录用户时不存在方法 Illuminate\Auth\RequestGuard::attempt

问题描述

我的应用程序创建从电子表格派生的用户。他们使用“个人信息”登录,然后为该帐户创建密码。一开始有点像软登录,然后他们通过声明帐户来完成注册。

一旦发生“软登录”并且该帐户被“认领”,每次用户软登录时,我的中间件都会将他们重定向到密码页面,然后他们在其中输入密码。

一旦他们这样做了,我需要验证这是正确的密码。到目前为止,我这样做:

public function auth(Request $request)
{
    $request->validate([
        'password' => 'required'
    ]);

    if(Auth::attempt([
        // Auth::user() works because they are "soft logged in"
        // However, middleware prevents all routes until they authenticate
        // Their password once the accounts claimed
        'id' => Auth::user()->getAuthIdentifier(),
        'password' => $request->input('password'),
    ])) {
        DB::table('sessions')->where('user_id', '=', Auth::user()->getAuthIdentifier())
                ->where('user_agent', '=', $request->server('HTTP_USER_AGENT'))
                ->update([
                    'authenticated' => true
                ]);

        return redirect(route('dashboard'));
    }

    return Redirect::back()->withErrors(['Invalid password. Please try again.']);
}

我得到的问题是这attempt给了我这个错误:

Method Illuminate\Auth\RequestGuard::attempt does not exist. 

我在Auth.php配置文件中检查了我的警卫:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],

并且driver设置为session所以我现在不确定是什么导致了这个问题。任何帮助都会很棒。

标签: phplaravelsessionguard

解决方案


现在,我已经解决了这个问题password_verify()

        $hash = DB::table('users')->select('password')
                ->where('id', '=', Auth::user()->getAuthIdentifier())
                ->get()
                ->all()[0]->password;

        if(password_verify($request->input('password'), $hash)) {
            DB::table('sessions')->where('user_id', '=', Auth::user()->getAuthIdentifier())
                    ->where('user_agent', '=', $request->server('HTTP_USER_AGENT'))
                    ->update([
                        'authenticated' => true
                    ]);

            return redirect(route('dashboard'));
        }

推荐阅读