【问题标题】:Laravel - signed route with 404 error for an email unsubscribe linkLaravel - 电子邮件退订链接的签名路由出现 404 错误
【发布时间】:2021-05-04 14:13:01
【问题描述】:

我有一个电子邮件退订链接,但是当我点击该链接时,我收到错误 404。

这是我的代码。

首先,这是带有签名路由的取消订阅链接的生成(链接没问题)

private function generateUnsubscribeLink($meoId, $email)
{
    return URL::signedRoute(
        'meo.confirm-unsubscribe', [
            'meo' => $meoId,
            'email' => $email
        ]
    );
}

接下来,这是我的 web.php 路由

Route::get('/unsubscribe/{meo}/{email}', 'MeoMailController@confirmUnsubscribe')->name('meo.confirm-unsubscribe');
Route::post('/unsubscribe/confirmed/{meo}/{email}', 'MeoMailController@unsubscribe')->name('meo.unsubscribe');

最后,这是我的控制器

public function confirmUnsubscribe(Request $request, Meo $meo, MailRecipient $email){
        if (!$request->hasValidSignature()) {
            abort(401);
        }

        return view('mail.confirm_unsubscribe', compact(['request', 'meo', 'email']));
    }

    public function unsubscribe(Meo $meo, MailRecipient $email)
    {
          $email->state = MailRecipientState::UNSUBSCRIBED;
          $email->save();

        return view('mail.unsubscribed');
    }

最后的结果是当我点击退订链接时出现错误404

链接是 unsubscribe/meoId/email@example.com?SIGNEDROUTE

这里有什么问题?

过去,我使用相同的方法但没有电子邮件(仅使用 meoId),并且工作正常

【问题讨论】:

  • 这意味着你在MailRecipient的邮箱没有找到
  • @MuhammadDyasYaskur 我可以在confirmUnsubscribe 中只使用$email 吗?
  • 我不知道MailRecipient是什么?模型还是库函数?
  • @MuhammadDyasYaskur 一个模特
  • 是的,请查看我的答案以获取完整代码

标签: laravel email hyperlink unsubscribe


【解决方案1】:

将方法 arg 中的 MailRecipient $email 更改为 $email,然后像 $email = MailRecipient::where('email',$email)->first() 一样手动查找该模型。应该是这样的:

public function confirmUnsubscribe(Request $request, Meo $meo, $email){
 if (!$request->hasValidSignature()) {
abort(401);
}

$email = MailRecipient::where('email',$email)->first();
return view('mail.confirm_unsubscribe', compact(['request', 'meo', 'email']));
}

public function unsubscribe(Meo $meo, $email)
{
$email = MailRecipient::where('email',$email)->first();

$email->state = MailRecipientState::UNSUBSCRIBED;
$email->save();

return view('mail.unsubscribed');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 2019-02-01
    • 2013-04-21
    • 2018-06-20
    • 2016-05-30
    • 2012-03-24
    • 1970-01-01
    • 2015-04-05
    相关资源
    最近更新 更多