[英]LARAVEL 7.0 Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, array given
[英]Argument 1 passed to SessionGuard::login() must be an instance of Auth\Authenticatable in Laravel 5.2
我正在使用Laravel 5.2。
我在users
表中添加了一个名为username
的新字段,并将其包含在视图和AuthController.php
我也在检查用户是否要对用户名使用保留的Slug,如果是,则抛出错误,如果用户名正确,则将其保存在数据库中。
我正在检查2个保留的子弹banner
和image
-这就是我保留的全部。
如果我取消检查,数据将正常保存在数据库中,包括保留的块。 所以我必须做检查。
但是,当我应用支票时,出现此错误
SessionGuard.php第439行中的ErrorException:
传递给Illuminate \\ Auth \\ SessionGuard :: login()的参数1必须是Illuminate \\ Contracts \\ Auth \\ Authenticatable的实例,已给出字符串,在C:\\ xampp \\ htdocs \\ socialnet \\ vendor \\ laravel \\ framework \\ src \\ Illuminate中调用第63行的\\ Foundation \\ Auth \\ RegistersUsers.php并已定义
这是我修改后在AuthController
代码
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
'username' => 'required|alpha_num|unique:users,username',
]);
}
protected function create(array $data)
{
$check = $this->slugCheck($data['username']);
if($check['status'] == 'nok') {
return 'this username is a reserved name';
} else {
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'username' => $data['username'],
]);
}
}
public function slugCheck($slug){
$slug = strtolower($slug);
// is the slug in the banned words list
//
if(array_search($slug, array('','banner','image'))){
return array('status' => 'nok', 'message' => 'This slug is on a list of reserved names');
}
$user = User::where('username', '=', $slug)->first();
if($user){
return array('status' => 'nok', 'message' => 'This slug is already taken');
} else {
return array('status' => 'ok', 'message' => 'Slug is unique');
}
}
如果在声明$check
变量并选择保留名称后dd($check)
,我将得到正确的响应。
array:2 [▼
"status" => "nok"
"message" => "This slug is on a list of reserved names"
]
那是因为您要返回一个字符串,并且该类需要一个Authenticatable实例。
您可以选择在中间件中进行验证。 创建一个中间件,检查用户名是否为“ Slug”,并且仅在验证通过后才继续使用create()方法,否则返回字符串:“用户名为保留名”
现在,您可以通过删除slugCheck方法来清理AuthController,并且始终可以确定,只要调用create()方法,该用户名就不会是Slug。
您可以查看laravel文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.