Laravel 8: отправить подтверждение по электронной почте после регистрации laravelPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Laravel 8: отправить подтверждение по электронной почте после регистрации laravel

Сообщение Anonymous »

Я создаю API Laravel. Я хочу, чтобы, когда я регистрируюсь, подтверждение по электронной почте будет автоматически отправлять код активации на адрес электронной почты пользователя.
Проблема в том, что когда я создаю новый код активации, я также создаю новую запись в таблице токенов, эта запись имеет поле user_id, поэтому для ее сохранения я использую JWTAuth::user()->id, но у меня есть эта ошибка:
Пытаюсь получить свойство 'id' необъекта
Я знаю, почему это происходит, потому что я не вводил никаких токенов и не знаю, как с этим справиться и где создать новую запись в токенах таблица
подробнее у меня есть:

Код: Выделить всё

AuthController
: Войдите и зарегистрируйтесь

Код: Выделить всё

 public function register(Request $request) {

$validator = Validator::make($request->all(), [
'name'=>'required|string|min:3|max:30',
'email' => 'required|string|email|max:100|unique:users',
'password' => 'required|string|confirmed|min:6',
]);

if($validator->fails()){
return response()->json($validator->errors()->toJson(), 400);
}

$user = User::create(array_merge(
$validator->validated(),
['password' => bcrypt($request->password)],
));

$token = JWTAuth::fromUser($user);

dd($this->sendNotification());

$user->$this->sendNotification();

return response()->json([
'message' => 'successfully created',
'user' => $user,
'token' => $token,
], 201);
}

Код: Выделить всё

EmailVerifyController
: для проверки электронной почты пользователя и подтверждения кода активации

Код: Выделить всё

public function emailVerify(Request $request){
$data = $request->validate([
'code' => 'required|size:10|numeric',
]);
$interedCode = (int)$data['code'];//convert code from string to integer

$userCode = Token::where('user_id' , JWTAuth::user()->id)->first();//find user from tokens table
$activationCode = $userCode->code; //get activation code of user in tokens table
$expires_in = (int)$userCode->expires_in; //get expire time of code

$now = Carbon::now()->timestamp;

if($interedCode == $activationCode) {
if ($now < $expires_in) {
$user = JWTAuth::user()->id;
$findUser = User::find($user);
$findUser->email_verified_at = Carbon::now()->timestamp;
$findUser->save();

$token = Token::where('user_id', JWTAuth::user()->id)->first();
$token->status = 1;
$token->save();

return response()->json('email verified successfully', 200);
} else {
return response()->json('code expired', 400);
}
}else{
return response()->json('wrong activation code' , 400);
}
}

Код: Выделить всё

SendNotificationTrait
: для отправки электронной почты и создания новой записи в таблице токенов

Код: Выделить всё

trait EmailVerifyTrait
{
public function sendNotification(){

$random = $this->generateVerificationCode(6);

$details = [
'title' => 'Mail from ItSolutionStuff.com',
'body' =>$random,
];

Mail::to('*****@gmail.com')->send(new VerifyMail($details));

return response()->json([
'message'=>'your email verification code sent to your email'
] , 201);
}

public function generateVerificationCode($length = 6) {
$characters = '0123456789';
$charactersLength = strlen($characters);
$code = '';
for ($i = 0; $i < $length;  $i++) {
$code .= $characters[rand(0, $charactersLength - 1)];
}

$token = new Token();
$token->user_id = JWTAuth::user()->id;
$token->code = $code;
$token->status = 0;
$token->save();

return $code;
}

Код: Выделить всё

tokens tables
: есть поля: user_id, code, созданный_at, expires_in
так как я могу обрабатывать создание новой записи токена в таблице токенов?
или мне следует использовать прослушиватель событий?
спасибо за помощь и извините за мой язык.>

Подробнее здесь: https://stackoverflow.com/questions/684 ... on-laravel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»