我正在使用Laravel 5.2。
我在名为users
的{{1}}表格中添加了一个新字段,并将其添加到视图中username
我也在检查用户是否要使用保留slug作为他的用户名,如果是,我抛出错误,如果用户名好,我保存在数据库中。
我正在检查2个预留的slu {AuthController.php
和banner
- 这是我保留的所有内容。
如果我删除了检查,数据会正常保存在数据库中,包括保留的slugs。所以我必须做检查。
但是,当我应用支票时,我收到此错误
SessionGuard.php第439行中的ErrorException:
传递给Illuminate \ Auth \ SessionGuard :: login()的参数1必须是Illuminate \ Contracts \ Auth \ Authenticatable的实例,给定字符串,在C:\ xampp \ htdocs \ socialnet \ vendor \ laravel \ framework \中调用src \ Illuminate \ Foundation \ Auth \ RegistersUsers.php在第63行并定义了
这是我在修改后的image
中的代码
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');
}
}
变量并选择保留名称后dd($check)
,我会得到正确的答案。
$check
答案 0 :(得分:2)
这是因为您正在返回一个字符串,而该类正在期待Authenticatable的一个实例。
您可以选择在中间件中移动验证。创建一个中间件,检查用户名是否是一个' Slug'并且只有在验证通过时才进入create()方法,否则返回字符串:'用户名是保留名称'
现在你可以通过删除slugCheck方法来清理AuthController,并且你总是可以确定每当调用create()方法时,该用户名都不是Slug。
您可以查看laravel文档