Я сделал этот метод для отправки временного кода на номер мобильного телефона пользователя для проверки его учетной записи:
public function signInWithToken()
{
if (Session::has('nextStep') && Session::has('foundUser')) {
$user = User::where('usr_mobile_phone', Session::get('foundUser'))->first();
if (Session::has('codeSent')){
$nowTime = now();
$sentTime = Session::get('codeSent');
if ($nowTime >= $sentTime){
$user->activeCode()->delete();
Session::forget('codeSent');
}
}else{
$code = ActiveCode::generateCode($user);
$user->notify(new ActiveCodeNotification($code, Session::get('foundUser')));
Session::put('codeSent', now()->addMinutes(10));
}
return view('frontend.auth.token');
}else{
abort(404);
}
}
Таким образом, в первый раз генерируется код, и сессия codeSent
также будет отправлена, и ее значение на 10 минут превышает текущее время.
Затем мне также нужно проверить, была ли эта сессия уже отправлена, тогда она должна вычесть $nowTime
из $sentTime
, чтобы узнать, был ли код сгенерирован более 10 минут назад и является ли он слишком старым: (поэтому код должен быть удален из БД и сессию надо забыть)
$nowTime = now();
$sentTime = Session::get('codeSent');
if ($nowTime >= $sentTime){
$user->activeCode()->delete();
Session::forget('codeSent');
}
Но этот код не запустится и вернет эту ошибку:
Значение nowTime
вар:
Значение sentTime
var (установите currentTime + 10 минут как время истечения сеанса codeSent
):
И я знаю, что это потому, что эти значения переменных sentTime
&& nowTime
нельзя каким-то образом вычесть друг из друга.
Но на самом деле не знаю, как правильно выполнить эту проверку!
Так что, если вы знаете, пожалуйста, дайте мне знать, я был бы очень признателен за любую идею или предложение от вас, ребята...
вы можете использовать Carbon diffInSeconds, как код ниже (непроверенный) сначала нужно разобрать раз с углеродом затем используйте это:
$totalDuration = $finishTime->diffInSeconds($startTime);
// 21
вам нужно использовать javascript или jquery, чтобы показать оставшееся время.
@Pouya, вы можете вернуть его с помощью представления ('frontend.someView', compact ('totalDuration')) и использовать jQuery, чтобы показать его / продолжать запрашивать его или статический в html
Я задал вопрос об этом здесь: stackoverflow.com/questions/74699048/…
Если вам нужно найти разницу в минутах Вы можете использовать его:
$nowTime = now();
$sentTime = Session::get('codeSent');
if ($nowTime->diffInMinutes($sentTime)>10)
{ $user->activeCode()->delete(); Session::forget('codeSent'); }
Спасибо, у меня есть еще одна проблема, связанная с этим, которая также находится на награде, пожалуйста, проверьте ее: я задал вопрос об этом здесь: stackoverflow.com/questions/74699048/…
@zorehda Привет, приятель, ты удалил свой ответ на вопрос о награде, я собирался принять его, но теперь я не вижу от тебя ответа на этот вопрос!
ты его использовал? это сработало?
Да, я внес в него некоторые изменения, и само время setInterval отлично работает, но у меня проблема с контроллером, который не удаляет сеанс codeSent
. Вы можете опубликовать свой ответ еще раз
я опубликую это снова
Знаете ли вы, как показать это значение
$totalDuration
в реальном времени на лезвии, чтобы пользователь видел, сколько секунд осталось?