验证两个表的注册:Laravel 5.1

时间:2015-09-02 15:58:58

标签: php authentication laravel-5.1

我是Laravel的新手,正在尝试弄清楚如何在新用户注册期间对两个表进行身份验证。

我修改了AuthController中的默认方法 - 我正在检查商店号码是否有效,如果是,请注册用户。这很好 - 如果提供的商店号码签出,则将用户插入两个表(useruser_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: 重定向上不存在方法[失败]。

1 个答案:

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