如何在laravel默认身份验证系统中重定向。例如在Auth \ RegisterController
中protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'contact_no' => 'required|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
}
protected function create(array $data)
{
$email = $data['email'];
$token = $data['token'];
$checkUser = Invitation::where('email', $email)
->where('token', $token)
->first();
if (!$checkUser) {
return redirect()->back()->with('error', 'Credentials not matched !');
}
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'contact_no' => $data['contact_no'],
'password' => bcrypt($data['password']),
]);
在创建用户之前我想检查用户是否存在,来自另一个表的令牌来了。我带有查询的checkuser,如果我在create方法之前使用它,
if (!$checkUser) {
return redirect()->back()->with('error', 'Credentials not matched !');
}
它会抛出错误
Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of Illuminate\Http\RedirectResponse given,
在if条件内重定向发生了问题。如果在检查用户返回null时显示错误,我在内部('错误')
答案 0 :(得分:1)
使用 isset 检查用户是否存在。
if (!isset($checkUser)) {
return redirect()->back()->with('error', 'Credentials not matched !');
}
最后,我建议使用Laracasts/Flash来获得更流畅的Flash消息。所以你的代码就是这样的。
flash()->error('Credentials not matched.');
return redirect()->back();
总结我的建议:
if (!isset($checkUser)) {
flash()->error('Credentials not matched.');
return redirect()->back();
}
答案 1 :(得分:0)
您可以在validator
的{{1}}方法中添加逻辑,如下所示:
RegisterController
如果验证中存在错误,laravel将自动重定向到注册页面。
答案 2 :(得分:0)
如果受保护函数中的条件在RegisterController
中创建(数组$ data),则进行更改 if (!$checkUser) {
return null;
}
并从RegisterController中的特征RegistersUsers覆盖寄存器方法
public function register(Request $request)
{
$this->validator($request->all())->validate();
$user = $this->create($request->all());
if(!$user) return redirect()->back()->with('error','Credentials Not Matched! ');
event(new Registered($user));
$this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}