繁体   English   中英

Laravel 8 未发送验证 email

[英]Laravel 8 not sending verification email

I am trying to implement Laravel's default email verification but whenever I change column name of users table from email to user_email Laravel stop sending verification email.

我还覆盖了在MyVerifyEmail.php文件中找到的默认方法getEmailForVerification()在我的用户 Model 中正确返回user_email

我的用户 Model:

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable implements MustVerifyEmail
{
    use HasFactory, Notifiable;


    public function getAuthPassword ()
    {
        return $this->user_password;
    }

    protected $primaryKey = 'user_id';

    protected $fillable = [
        'user_name',
        'user_email',
        'user_password',
        'user_phone',
        'user_role_id',
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];

    protected $casts = ['email_verified_at' => 'datetime',];
    
    public function getEmailForVerification()
    {
        return $this->user_email;
    }

    public function role()
    {
        return $this->belongsTo(Role::class , 'user_role_id');
    }
}

注册控制器代码:

public function store(Request $request)
    {
        $request->validate([
            'name'=>'required',
            'email'=>'required |email|unique:App\Models\User,user_email',
            'password'=>'required',
            'phone'=>'required|unique:App\Models\User,user_phone|min:10|max:15'
        ]);
        
        $user = User::create([
        'user_name' => $request->name,
        'user_email' => $request->email,
        'user_password' => Hash::make($request->password),
        'user_phone' => $request->fullMobileNumber,
        'user_role_id' => '9'
        ]);

        event(new Registered($user));
        $query = $user->save();
        
        
        if($query){
            $request->session()->flash('success','Your account has been created successfully');

            return redirect()->route('login');
        }

        else{
            return back()-> with('failed','Something went wrong. Please try again');
        }
    }

    public function emailVerificationNotice()
    {
        return view('auth.verifyEmail');
    }

    public function emailVerificationVerify(EmailVerificationRequest $request)
    {
        $request->fulfill();
        return redirect()->route('dashboard');
    }

Register.blade.php

<form action="{{route('auth.store')}}" method="POST" id="user-registration" data-parsley-validate>
                        @csrf
                        
                        <div id="name-wrapper" class="form-group parsley-input">
                            <label>Full name<span class="tx-danger">*</span></label>
                            <input type="text" name="name" class="form-control" placeholder="Enter your full name"
                            data-parsley-class-handler="#name-wrapper" data-parsley-required-message="Please enter your full name"data-parsley-pattern="^[a-zA-Z \s]+$"
                            data-parsley-pattern-message="Numbers & special characters aren't allowed"required>
                            <p class="text-danger">@error('name'){{$message}}@enderror</p>
                        </div>
                        
                        <div id="email-wrapper" class="form-group parsley-input">
                            <label>Email address<span class="tx-danger">*</span></label>
                            <input type="email" name="email" class="form-control" placeholder="Enter your email address"
                            data-parsley-required-message="Please enter your email address" required  autocomplete="off">
                            <p class="text-danger">@error('email'){{$message}}@enderror</p>
                        </div>

                        <div id="password-wrapper" class="form-group parsley-input">
                            <label>Password<span class="tx-danger">*</span></label>
                            <input type="password" name="password" class="form-control" placeholder="Enter your password"
                            data-parsley-required-message="Please enter your password" data-parsley-pattern="^(?=.*\d)(?=.*[a-zA-Z]).{8,}$"
                            data-parsley-pattern-message="Password must be 6-50 chars long, at least one letter & one number" required >
                            <p class="text-danger">@error('password'){{$message}}@enderror</p>
                        </div>

                        <div id="phone-wrapper" class="form-group parsley-input">
                            <label>Mobile number<span class="tx-danger">*</span></label>
                            <input type="tel" name="phone" id="user-phone" class="form-control" required>
                            <p id="phone-error-null" class="d-none">Please enter mobile number</p>
                            <p id="phone-error-msg" class="d-none"></p>
                            <p class="text-danger">@error('phone'){{$message}}@enderror</p>
                        </div>
        
                    
                        <div class="form-group tx-12">
                            By clicking <strong>Create an account</strong> below, you agree to our terms of service and privacy statement.
                        </div><!-- form-group -->
                        
                        <button type="submit" id="submit-registration" class="btn btn-brand-02 btn-block">Create Account</button>
                    </form>

.ENV 配置

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=c1952edd7b2969
MAIL_PASSWORD=3376437f06507d
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=from@example.com
MAIL_FROM_NAME="${APP_NAME}"

实际上问题来自于覆盖 function getEmailForVerification()。

因此,我建议您在 Model 上制作文件MustVerifyEmail.php ,然后从该文件中复制Illuminate\Contracts\Auth\MustVerifyEmail中的所有代码并粘贴到新文件上。 然后在新文件上使用您的代码,例如

public function getEmailForVerification()
    {
        return $this->user_email;
    }

并且不要忘记像替换一样更改 User.php 文件
使用 Illuminate\Contracts\Auth\MustVerifyEmail;

使用 App\Models\MustVerifyEmail;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM