Laravel 护照注册错误响应

Laravel Passport register wrong response

我正在创建一个 Laravel API 用于身份验证和数据库管理。在我的 AuthController 中,我有一个运行良好的登录功能和一个不起作用的注册功能。它没有返回新用户信息和 201 状态,而是 returns 一个 200 并显示 API 的主页(welcome.blade.php 创建了 Laravel)。

我在api.php的路线:

Route::post('login', 'AuthController@login');
Route::post('register', 'AuthController@register');

我的授权控制器:

class AuthController extends Controller
{
    /**
     * Register user
     */
    public function register(Request $request)
    {
        $request->validate([
            'firstname' => 'required|string',
            'surname' => 'required|string',
            'email' => 'required|email|unique:users',
            'password' => 'required|string|confirmed'
        ]);

        $user = new User([
            'firstname' => $request->firstname,
            'surname' => $request->surname,
            'email' => $request->email,
            'password' => bcrypt($request->password)
        ]);

        $user->save();
        
        $success['token'] = $user->createToken('MyApp')->accessToken;
        $success['firstname'] = $user->firstname;
        $success['surname'] = $user->surname;
        $success['email'] = $user->email;
        return response()->json(['success' => $success], 201);
    }

    /**
     * Login user and create token
     *
     * @param  [string] email
     * @param  [string] password
     * @param  [boolean] remember_me
     * @return [string] access_token
     * @return [string] token_type
     * @return [string] expires_at
     */
    public function login(Request $request)
    {
        $request->validate([
            'email' => 'required|email|exists:users,email',
            'password' => 'required|string',
            // 'remember_me' => 'boolean'
        ]);

        $credentials = request(['email', 'password']);
        
        if(!Auth::attempt($credentials))
        {
            return response()->json([
                'message' => 'Unauthorized',
                'request'=> $credentials
            ], 401);
        }
        $user = Auth::user();
        $tokenResult = $user->createToken('ApiPassToken');
        $token = $tokenResult->token;

        if ($request->remember_me)
        {
            $token->expires_at = Carbon::now()->addWeeks(1);
        }

        $token->save();

        return response()->json([
            'access_token' => $tokenResult->accessToken,
            'token_type' => 'Bearer',
            'expires_at' => Carbon::parse(
                $tokenResult->token->expires_at
            )->toDateTimeString()
        ]);
    }

寄存器函数有什么问题?

我认为这是为了您的验证。当您的验证失败时,您必须 return 一个 json 否则它将是 return 最后一次查看。像这样进行验证

$validator = Validator::make($request->all(), [
            'firstname' => 'required|string',
            'surname' => 'required|string',
            'email' => 'required|email|unique:users',
            'password' => 'required|string|confirmed'
        ]);

        if ($validator->fails()) {
            return response()->json(['message' => $validator->errors()->first(), 'status' => false], 500);
        }

并记住使用验证器 class

use Illuminate\Support\Facades\Validator;