Уникальный регистрационный токен Laravel

#php #laravel #token

#php #laravel #токен

Вопрос:

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

Я попробовал это:

 $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 Not found. Я сгенерировал токены с
$string = str_random(40);

Комментарии:

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

Ответ №1:

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

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

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

Комментарии:

1. Спасибо, это сработало для меня, но я все еще получаю ошибку 404, потому что он не может найти localhost: 8000 / register, но <a href="/register"></a> в представлении он может найти маршрут? С правильным токеном я могу зарегистрироваться сейчас, но без него я все равно получаю ошибку 404

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

Ответ №2:

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

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