在RegisterController Laravel中检查用户是否存在并重定向回注册页面

时间:2017-10-18 11:32:51

标签: php laravel

如何在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时显示错误,我在内部('错误')

3 个答案:

答案 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());
    }