传递给 SessionGuard::login() 的参数 1 必须是 Laravel 5.2 中 Auth\Authenticatable 的实例

Hal*_*nex 1 php laravel laravel-5

我正在使用 Laravel 5.2。

\n

我在users名为的表中添加了一个新字段username,并将其包含在视图中,AuthController.php

\n

我还在检查用户是否要使用保留的别名作为他的用户名,如果是,我会抛出一个错误,如果用户名是好的,我会保存在数据库中。

\n

我正在检查 2 个保留的 slugs bannerimage这就是我所保留的全部。

\n

如果我删除该检查,数据将正常保存在数据库中,包括保留的段。所以我必须做检查。

\n

但是,当我应用检查时,我收到此错误

\n
\n

SessionGuard.php 第 439 行中的 ErrorException:

\n

传递给 Illuminate\\Auth\\SessionGuard::login() 的参数 1 必须是 Illuminate\\Contracts\\Auth\\Authenticatable 的实例,给定字符串,在 C:\\xampp\\htdocs\\socialnet\\ 中调用vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Auth\\RegistersUsers.php 第 63 行并定义

\n
\n

AuthController这是我修改后的代码

\n
protected function validator(array $data)\n{\n    return Validator::make($data, [\n        'name' => 'required|max:255',\n        'email' => 'required|email|max:255|unique:users',\n        'password' => 'required|min:6|confirmed',\n        'username' => 'required|alpha_num|unique:users,username',\n    ]);\n}\n\nprotected function create(array $data)\n{\n    $check = $this->slugCheck($data['username']);\n\n    if($check['status'] == 'nok') {\n        return 'this username is a reserved name';\n    } else {\n        return User::create([\n            'name' => $data['name'],\n            'email' => $data['email'],\n            'password' => bcrypt($data['password']),\n            'username' => $data['username'],\n        ]);\n    }\n}\n\npublic function slugCheck($slug){\n\n    $slug = strtolower($slug);\n\n    // is the slug in the banned words list\n    //\n    if(array_search($slug, array('','banner','image'))){\n        return array('status' => 'nok', 'message' => 'This slug is on a list of reserved names');\n    }\n\n    $user = User::where('username', '=', $slug)->first();\n\n    if($user){\n        return array('status' => 'nok', 'message' => 'This slug is already taken');\n    } else {\n        return array('status' => 'ok', 'message' => 'Slug is unique');\n    }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果我dd($check)在声明$check变量并选择保留名称后,我会得到正确的响应。

\n
array:2 [\xe2\x96\xbc\n  "status" => "nok"\n  "message" => "This slug is on a list of reserved names"\n]\n
Run Code Online (Sandbox Code Playgroud)\n

Joh*_*rin 5

这是因为您返回一个字符串,并且该类需要 Authenticatable 的实例。

您可以选择将验证转移到中间件中。创建一个中间件,检查用户名是否为“Slug”,并且仅在验证通过时才继续执行 create() 方法,否则返回字符串:“用户名是保留名称”

现在,您可以通过删除 slugCheck 方法来清理 AuthController,并且您始终可以确定每当调用 create() 方法时,该用户名都不是 Slug。

你可以查看laravel文档