php - 尝试登录用户时不存在方法 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
所以我现在不确定是什么导致了这个问题。任何帮助都会很棒。
解决方案
现在,我已经解决了这个问题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'));
}
推荐阅读
- javascript - 删除子元素jquery
- javascript - 修改模板内容失败
- java - jdbc:前端java,后端Oracle 10g express版
- angular - 打字稿版本 3.7.2 和 Angular
- combinations - 在概率上相同的项目被视为不同的项目?
- node.js - 如何将 vuejs - express 应用程序部署到本地 Ubuntu?
- node.js - 我的 API 的删除部分有什么问题?
- c++ - 为什么在这种情况下使用 new 和 std::unique_ptr 会导致崩溃?
- java - Spring Throws "ERROR SqlExceptionHelper: Already closed" after timeout
- android - 如何在 Android 中有效清除 Edittext