Hal*_*nex 1 php laravel laravel-5
我正在使用 Laravel 5.2。
\n我在users名为的表中添加了一个新字段username,并将其包含在视图中,AuthController.php
我还在检查用户是否要使用保留的别名作为他的用户名,如果是,我会抛出一个错误,如果用户名是好的,我会保存在数据库中。
\n我正在检查 2 个保留的 slugs banner,image这就是我所保留的全部。
如果我删除该检查,数据将正常保存在数据库中,包括保留的段。所以我必须做检查。
\n但是,当我应用检查时,我收到此错误
\n\n\nSessionGuard.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
AuthController这是我修改后的代码
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}\nRun Code Online (Sandbox Code Playgroud)\n如果我dd($check)在声明$check变量并选择保留名称后,我会得到正确的响应。
array:2 [\xe2\x96\xbc\n "status" => "nok"\n "message" => "This slug is on a list of reserved names"\n]\nRun Code Online (Sandbox Code Playgroud)\n
这是因为您返回一个字符串,并且该类需要 Authenticatable 的实例。
您可以选择将验证转移到中间件中。创建一个中间件,检查用户名是否为“Slug”,并且仅在验证通过时才继续执行 create() 方法,否则返回字符串:“用户名是保留名称”
现在,您可以通过删除 slugCheck 方法来清理 AuthController,并且您始终可以确定每当调用 create() 方法时,该用户名都不是 Slug。
你可以查看laravel文档
| 归档时间: |
|
| 查看次数: |
12647 次 |
| 最近记录: |