#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>
в представлении он может найти маршрут? С правильным токеном я могу зарегистрироваться сейчас, но без него я все равно получаю ошибку 4042.
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();