如何在Laravel 5.3中修改Passport OAuth的错误消息?

jre*_*kes 5 oauth laravel laravel-5.3 laravel-passport

我正在使用Laravel 5.3作为移动应用程序连接的REST服务器.我已经为大多数Laravel错误定制了异常处理程序,并且按照我喜欢的方式工作.

但是,OAuth错误很难恢复.例:

{
    "error":"invalid_credentials",
    "message":"The user credentials were incorrect."
}
Run Code Online (Sandbox Code Playgroud)

显然,我不是唯一一个被带有下划线的错误代码所困扰的人 - 我只有少数beta测试者,他们已经将此报告为"bug".

Passport似乎绕过了常规错误处理程序League\OAuth2\Server\Exception\OAuthServerException而是通过了.这些丑陋的错误消息被硬编码到该文件中.

public static function invalidCredentials()
{
    return new static('The user credentials were incorrect.', 6, 'invalid_credentials', 401);
}
Run Code Online (Sandbox Code Playgroud)

我已经认真尝试了十几种扩展/覆盖OAuthServerException的方法,但我似乎无法使其工作.

Mik*_*ike 0

要修改 Passport 中的错误消息,一种方法是扩展 Passport 基类以及类似的 OAuthException 方法,就像您尝试的那样。这是如何执行此操作的合理解释。我试图做类似的事情,但就我而言,发现它太过分了,所以选择了更简单的事情。

但是,如果问题是如何在移动应用程序中显示错误,一种方法可能是将这些错误映射到更理想的内容,而不是直接使用它们向用户报告(以下是伪代码,因为我不确定您的移动应用程序的编码是什么):

function handleErrorResponse(response) {
    var errorMap = {
        "invalid_credentials": "Username or password was incorrect." 
    };

    return errorMap[response.error];
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,League\OAuth2\Server 就是您的事实来源,您的应用程序在向用户报告时只需翻译这些基本消息。希望能帮助到你!