【问题标题】:How to fix Laravel "Post method is not supported for this route"?如何修复 Laravel“此路线不支持 Post 方法”?
【发布时间】:2019-08-15 05:04:40
【问题描述】:

我正在尝试使用 Laravel Passport 创建身份验证,我已经按照官方文档中提到的正确方式配置了所有内容。 GET Route 方法运行良好(参见下面的代码),但是当我尝试 POST Route 方法时,我总是收到此错误:

此路由不支持 POST 方法。支持的方法:GET、HEAD。

P.S:我正在使用 Postman 进行测试。

我尝试包含 CSRF 令牌,但没有任何反应,并且出现同样的错误。

控制器

class AuthController extends Controller
{
    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ]);

        if ($validator->fails()) {
            return response(['errors' => $validator->errors()->all()], 422);
        }

        $request['password'] = Hash::make($request['password']);
        $user = User::create($request->toArray());
        $token = $user->createToken('Laravel Password Grant Client')->accessToken;
        $response = ['token' => $token];

        return response($response, 200);
    }

    public function login(Request $request)
    {
        $user = User::where('email', $request->email)->first();

        if ($user) {
            if (Hash::check($request->password, $user->password)) {
                $token = $user->createToken('Laravel Password Grant Client')->accessToken;
                $response = ['token' => $token];

                return response($response, 200);
            } else {
                $response = "Password missmatch";

                return response($response, 422);
            }

        } else {
            $response = 'User does not exist';

            return response($response, 422);
        }
    }

    public function logout(Request $request)
    {
        $token = $request->user()->token();
        $token->revoke();
        $response = 'You have been succesfully logged out!';

        return response($response, 200);
    }
}

路线

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Route::post('/login', 'Api\AuthController@login')->name('login.api');
Route::post('/register', 'Api\AuthController@register')->name('register.api');

我希望用户注册,它会返回身份验证令牌,但它显示给我 "此路由不支持 POST 方法。支持的方法:GET、HEAD。"

【问题讨论】:

  • "此路由不支持 POST 方法。支持的方法:GET、HEAD" -- 您选择了哪三个路由?
  • 第一条路由应该是api.php吧?所以url应该带有前缀api/user。我认为您没有在问题中包含所有信息。
  • @senty 是的,我必须在 api.php 中创建路由...现在可以完美运行了,非常感谢

标签: php laravel authentication oauth


【解决方案1】:

这一行应该在api.php

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

【讨论】:

    猜你喜欢
    • 2021-02-23
    • 1970-01-01
    • 2020-12-05
    • 2019-12-17
    • 2021-04-11
    • 2021-01-21
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多