You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.5 如何通过API触发找回密码邮件?是否需手动创建路由?

关于Laravel 5.5 Passport API实现密码重置的问题

没错,你确实需要手动创建API端的找回密码功能路由和相关逻辑。Passport默认只帮你配置了OAuth认证相关的路由(比如令牌获取、刷新、撤销这些),并没有自动包含密码重置的API流程——毕竟Laravel自带的密码重置默认是为web端视图设计的,API场景需要我们自己适配。

下面是具体的实现步骤,你可以参考:

1. 添加API路由

在routes/api.php文件中添加两个核心路由:一个用于发送重置链接邮件,另一个用于执行密码重置:

// 发送密码重置邮件
Route::post('password/email', 'Api\ForgotPasswordController@sendResetLinkEmail');
// 执行密码重置
Route::post('password/reset', 'Api\ResetPasswordController@reset');

2. 创建API专属的控制器

你可以参考Laravel自带的ForgotPasswordController和ResetPasswordController,复制一份到App\Http\Controllers\Api目录下,然后修改它们的响应逻辑,让返回结果是JSON格式(而不是web端的视图跳转)。

示例:ForgotPasswordController

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Http\Request;

class ForgotPasswordController extends Controller
{
    use SendsPasswordResetEmails;

    public function __construct()
    {
        $this->middleware('guest');
    }

    // 重写发送成功的响应
    protected function sendResetLinkResponse(Request $request, $response)
    {
        return response()->json(['message' => trans($response)], 200);
    }

    // 重写发送失败的响应
    protected function sendResetLinkFailedResponse(Request $request, $response)
    {
        return response()->json(['error' => trans($response)], 400);
    }
}

示例:ResetPasswordController

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Http\Request;

class ResetPasswordController extends Controller
{
    use ResetsPasswords;

    public function __construct()
    {
        $this->middleware('guest');
    }

    // 重写重置成功的响应
    protected function sendResetResponse(Request $request, $response)
    {
        return response()->json(['message' => trans($response)], 200);
    }

    // 重写重置失败的响应
    protected function sendResetFailedResponse(Request $request, $response)
    {
        return response()->json(['error' => trans($response)], 400);
    }
}

3. 调整密码重置邮件的链接

因为是API场景,邮件里的默认链接是web端的重置页面,你需要修改成你的前端重置页面地址,让用户在前端输入新密码后调用我们刚才创建的重置API。

你可以通过修改resources/views/auth/passwords/email.blade.php视图,把链接替换为你的前端地址,比如:

<a href="{{ config('app.frontend_url') }}/password/reset?token={{ $token }}&email={{ $email }}">重置密码</a>

记得在config/app.php里添加frontend_url配置项,指向你的前端域名。

4. 注意事项

  • API路由默认不受CSRF保护,所以直接发起POST请求即可,不需要携带CSRF令牌。
  • 确保你的用户模型App\User已经使用了Illuminate\Notifications\Notifiable trait,这是发送密码重置邮件的前提。
  • 请求参数要符合验证规则:发送邮件时需要email字段;重置密码时需要email、token、password、password_confirmation字段,这些规则trait里已经自带,你可以根据需求自定义调整。

内容的提问来源于stack exchange,提问作者user779681

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:22:08