我是Laravel的新手,正在尝试弄清楚如何在新用户注册期间对两个表进行身份验证。
我修改了AuthController
中的默认方法 - 我正在检查商店号码是否有效,如果是,请注册用户。这很好 - 如果提供的商店号码签出,则将用户插入两个表(user
和user_store
)并重定向到仪表板页面。
但是,如果针对 $store
的验证为false,则会收到以下错误
传递给Illuminate \ Auth \ Guard :: login()的参数1必须是Illuminate \ Contracts \ Auth \ Authenticatable的实例,Illuminate \ Http \ RedirectResponse的实例
正如您在代码中看到的那样,我只是尝试重定向到auth/register
视图,并提供商店编号无效的错误消息。我哪里错了?
查看此块下面的更新代码......
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:user',
'password' => 'required|min:6',
'store_number' => 'required',
]);
}
protected function create(array $data)
{
if(!$store = Store::where('number', $data['store_number'])->first()) {
// HERE'S WHERE I'M HAVING THE PROBLEM
return redirect('auth/register')->withErrors('store_number','Could not find a match for the Store Number');
} else {
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
$data['sid'] = $store->id;
$data['uid'] = $user->id;
$store = UserStore::create($data);
return $user;
}
}
更新
我之后将其移到validator()
方法中,因为在validator()
方法中进行验证更有意义......对吗?
这是我的新代码。
protected function validator(array $data)
{
if(!Store::where('number', $data['store_number'])->first()) {
// still not working!
return redirect('auth/register')->withErrors('store_number','Could not find a match for the Store Number');
}
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:user',
'password' => 'required|min:6',
'store_number' => 'required',
]);
}
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
$s['sid'] = $data['store_number'];
$s['uid'] = $user->id;
$store = UserStore::create($s);
return $user;
}
这是我的新错误消息
RedirectResponse.php第198行中的BadMethodCallException: 重定向上不存在方法[失败]。
答案 0 :(得分:1)
想出来。我需要在After
方法中使用validator()
验证钩子。 :)
protected function validator(array $data)
{
$validator = Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:user',
'password' => 'required|min:6',
'store_number' => 'required',
]);
$validator->after(function($validator) {
if(!Store::where('number', $_POST['store_number'])->first()) {
$validator->errors()->add('store_number', 'Could not find a match for the Store number');
}
});
return $validator;
}