###前提条件
windows10でdockerを使っています。コンテナの80番ポートを10080番ポートにマウントしています。
発生している問題・エラーメッセージ
送られてきたメールのVerify Email Adress ボタンをクリックすると404 not found。 urlは以下のようになっています。
http://localhost/email/verify/1/a6ad00ac113a19d953efb91820d8788e2263b28a?expires=1611154077&signature=3031b6d59db766e85353cf67c980b3fcfa0f013953d566fbe5fc031f1bb239cd
非同期にしなければ問題なくクリックできてemail_verify_atにデータが入ります。そのときのurlは以下のようになっています。
http://localhost:10080/email/verify/2/e5e5bab35e96c139710bfc3657a8d62a1d67ab7d?expires=1611155302&signature=ad2936cb8fc16af119f7e45ec6542d6a64b044eea2cce240d9a554b7bdc6e125
ポート番号が入っていないから404になると思うのですがなぜ非同期にすると違うurlが生成されるのかがわかりません。
url生成部分のコードは以下のようになっています。
verification.verifyが変わっている?
php
1namespace Illuminate\Auth\Notifications; 2 3 4class VerifyEmail extends Notification 5{ 6 7........ 8 9protected function verificationUrl($notifiable) 10 { 11 if (static::$createUrlCallback) { 12 return call_user_func(static::$createUrlCallback, $notifiable); 13 } 14 15 return URL::temporarySignedRoute( 16 'verification.verify', 17 Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)), 18 [ 19 'id' => $notifiable->getKey(), 20 'hash' => sha1($notifiable->getEmailForVerification()), 21 ] 22 ); 23 } 24 25........ 26 27}
以下は非同期にするために書き換えたコードです。
非同期のソースコード
php
1php artisan make:job QueuedVerifyEmailJob
php
1<?php 2 3namespace App\Jobs; 4 5use Illuminate\Bus\Queueable; 6use Illuminate\Contracts\Queue\ShouldBeUnique; 7use Illuminate\Contracts\Queue\ShouldQueue; 8use Illuminate\Foundation\Bus\Dispatchable; 9use Illuminate\Queue\InteractsWithQueue; 10use Illuminate\Queue\SerializesModels; 11use Illuminate\Auth\Notifications\VerifyEmail; 12use App\Models\User; 13 14class QueuedVerifyEmailJob implements ShouldQueue 15{ 16 use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; 17 18 /** 19 * Create a new job instance. 20 * 21 * @return void 22 */ 23 protected $user; 24 25 public function __construct(User $user) 26 { 27 $this->user = $user; 28 } 29 30 /** 31 * Execute the job. 32 * 33 * @return void 34 */ 35 public function handle() 36 { 37 $this->user->notify(new VerifyEmail); 38 } 39} 40
php
1<?php 2 3namespace App\Models; 4 5use Illuminate\Contracts\Auth\MustVerifyEmail; 6use Illuminate\Database\Eloquent\Factories\HasFactory; 7use Illuminate\Foundation\Auth\User as Authenticatable; 8use Illuminate\Notifications\Notifiable; 9use Laravel\Fortify\TwoFactorAuthenticatable; 10use Laravel\Jetstream\HasProfilePhoto; 11use Laravel\Sanctum\HasApiTokens; 12use App\Jobs\QueuedVerifyEmailJob; 13 14class User extends Authenticatable implements MustVerifyEmail 15{ 16 use HasApiTokens; 17 use HasFactory; 18 use HasProfilePhoto; 19 use Notifiable; 20 use TwoFactorAuthenticatable; 21 22 /** 23 * The attributes that are mass assignable. 24 * 25 * @var array 26 */ 27 protected $fillable = [ 28 'name', 29 'email', 30 'password', 31 ]; 32 33 /** 34 * The attributes that should be hidden for arrays. 35 * 36 * @var array 37 */ 38 protected $hidden = [ 39 'password', 40 'remember_token', 41 'two_factor_recovery_codes', 42 'two_factor_secret', 43 ]; 44 45 /** 46 * The attributes that should be cast to native types. 47 * 48 * @var array 49 */ 50 protected $casts = [ 51 'email_verified_at' => 'datetime', 52 ]; 53 54 /** 55 * The accessors to append to the model's array form. 56 * 57 * @var array 58 */ 59 protected $appends = [ 60 'profile_photo_url', 61 ]; 62 63 public function sendEmailVerificationNotification() 64 { 65 //dispactches the job to the queue passing it this User object 66 QueuedVerifyEmailJob::dispatch($this); 67 } 68}
回答1件
あなたの回答
tips
プレビュー