Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

51 lines
1.1KB

  1. <?php
  2. namespace App\Logic;
  3. use App\Email\Guests\PasswordSettingStart;
  4. use App\Models\PasswordSettingToken;
  5. use App\Models\User;
  6. use App\Util\DateUtil;
  7. use Illuminate\Support\Str;
  8. class PasswordSettingManager
  9. {
  10. public function __construct()
  11. {
  12. }
  13. public function generate(User $user)
  14. {
  15. // トークン生成
  16. $model = new PasswordSettingToken();
  17. $model->user_id = $user->id;
  18. $model->token = Str::uuid();
  19. $model->expires_at = DateUtil::now()->addHours(24);
  20. $model->save();
  21. // メール送信
  22. $email = (new PasswordSettingStart($model))
  23. ->setEmail($user->email);
  24. $emailManager = new EmailManager($email);
  25. $emailManager->confirm();
  26. }
  27. public function verify(string $token): User|null
  28. {
  29. $model = PasswordSettingToken::whereToken($token)
  30. ->expiresIn()
  31. ->first();
  32. if ($model === null) {
  33. return null;
  34. }
  35. $user = User::whereId($model->user_id)->firstOrFail();
  36. $model->delete();
  37. return $user;
  38. }
  39. }