2016-10-08 1 views
0

Я пытаюсь сделать регистрацию только для людей, у которых есть токен (случайно сгенерированный ключ), но у меня есть проблема, которую я не могу сравнить с моим токеном ввода с базой данных.Laravel unique registraion token

Я попытался это:

$token = Tokens::findOrFail($data['register_token']); 

       if($token) { 

        return User::create([ 
         'first_name' => $data['first_name'], 
         'last_name' => $data['last_name'], 
         'register_token' => $data['register_token'], 
         'email' => $data['email'], 
         'password' => bcrypt($data['password']), 
         'role' => 'student', 
        ]); 

       } 
       else { 

        return redirect('/register')->with('unkown_token', 'This Token does not exist!'); 


       } 

Я всегда получаю 404 не найден. Я создал маркеры с $string = str_random(40);

Благодарности

+0

Какова ваша структура таблицы токены? –

ответ

0

FindorFail работает на первичный ключ.

Для пользовательской колонки добавьте protected $primaryKey='custom_column_name' в модель. Но если вы не хотите этого делать, попробуйте выполнить обычный условный запрос, указанный ниже.

$token = Tokens::where('register_token',$data['register_token'])->firstOrFail(); 
+0

Спасибо, это сработало для меня, но я все еще получаю ошибку 404, потому что он не может найти localhost: 8000/register, но на '' в поле зрения он может найти маршрут? С правильным токеном я могу зарегистрироваться сейчас, но без меня все еще получается ошибка 404 –

+0

'firstOrFail' поиск результата в таблице, а если не найден, то выбрасывается исключение. Поэтому, чтобы перенаправить маршрут '/ register', если токен не найден, просто используйте first() вместо firstOrFail(), который возвращает null, если результат не найден, тогда условие else будет работать с перенаправлением/register url. –

0

Если register_token не первичный ключ таблицы tokens, получение 404 логично. Помните, что в findOrFail($id), $id находится primary key этой таблицы. Если register_token не ваша primary key, и вы хотите, чтобы запрос, основанный на register_token, то ваш запрос должен быть

$token = Tokens::where('register_token', $data['register_token'])->firstOrFail();