0

这是我的代码:

我的LoginResponse

<?php

namespace App\Http\Responses;

use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;

class LoginResponse implements LoginResponseContract
{
    /**
     * @param  $request
     * @return mixed
     */
    public function toResponse($request)
    {
        return response()->json([
            'resp' => "success"
        ],200);
    }
}

FortifyServiceProviders

<?php

namespace App\Providers;

use App\Actions\Fortify\CreateNewUser;
use App\Actions\Fortify\ResetUserPassword;
use App\Actions\Fortify\UpdateUserPassword;
use App\Actions\Fortify\UpdateUserProfileInformation;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\ServiceProvider;
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
use Laravel\Fortify\Fortify;
use App\Http\Responses\LoginResponse;


class FortifyServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {

    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Fortify::createUsersUsing(CreateNewUser::class);
        Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class);
        Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
        Fortify::resetUserPasswordsUsing(ResetUserPassword::class);

        RateLimiter::for('login', function (Request $request) {
            $email = (string) $request->email;

            return Limit::perMinute(15)->by($email.$request->ip());
        });

        $this->app->singleton(LoginResponseContract::class, LoginResponse::class);
    }

这不断返回{two-factor:false}

我还尝试通过将 fortify 登录响应更新FortifyServiceProvider's register method为:(这个完全不同,在创建 LoginResponse 类之前)

public function register()
{
    $this->app->instance(LoginResponse::class, new class implements LoginResponse {
        public function toResponse($request)
        {
            return response()->json([
                'resp' => 'success'
            ],200);
        }
    });
}

但是,仍然在登录时,我收到了这个响应,{two-factor: false}我错过了什么以及我应该在哪里更新,以便我可以在 fortify 上获得正确的登录响应。我在 laravel 水疗中心使用 fortify 和 sanctum。

4

1 回答 1

0

不确定出了什么问题,但您可以按照此过程检查这是否真的有效。

基本上,您所做的是正确的,这就是您可以找到错误的方法。

  1. 与其将那一行写在 上FortifyServiceProvider,不如写在AppServiceProvider'sboot 方法上。

  2. 如果它有效(并且应该有效),您应该确认您是否设置Fortify正确,您应该浏览文档中的每一行,以检查您是否遗漏了什么。https://laravel.com/docs/8.x/fortify

  3. 以防万一,如果您想缩小范围,我不确定您是否已将其包含App\Providers\FortifyServiceProvider::class,在您的config/app. 因此,它永远不会触发,要确认,您可以在启动方法上FortifyServiceProvider编写。dd('hit')FortifyServiceProvider's

请检查并告诉我您的发现。

于 2022-02-02T06:34:41.210 回答