【问题标题】:Laravel 8 not sending verification emailLaravel 8 不发送验证邮件
【发布时间】:2020-12-28 21:05:48
【问题描述】:

我正在尝试实现 Laravel 的默认电子邮件验证,但是每当我将 users tablecolumn nameemail 更改为 user_email 时,Laravel 都会停止发送验证电子邮件。

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

我的用户模型:

<?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}"

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    实际上问题来自于重写函数 getEmailForVerification()。

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

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

    别忘了修改 User.php 文件 喜欢替换
    使用 Illuminate\Contracts\Auth\MustVerifyEmail;

    使用 App\Models\MustVerifyEmail;

    【讨论】:

    • 我已经更新了我的刀片文件代码,那里没有任何问题。如上所述,我已尝试将我的 inputemail 重命名为 user_email,但仍然没有任何效果
    • @MusharrafKhan 你做到了吗?
    • name="user_email"
    • 你确定......当你在 db 中注册你的数据存储时
    • 我什至 dd(return this-&gt;user_email)getEmailForVerification() 方法中仔细检查我是否收到用户的电子邮件地址,是的,我收到了,但我不知道为什么 laravel 不发送电子邮件跨度>
    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 2021-02-15
    • 2019-03-05
    • 2023-03-28
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    相关资源
    最近更新 更多