如何自定义laravel passport错误信息?

Ton*_*Cat 7 message laravel laravel-passport

当我使用laravel5.3的Passport 密码授予令牌时

this.$http.post('/oauth/token', this.form)
     .then(response => {
         console.log(response)
     })
Run Code Online (Sandbox Code Playgroud)

我收到这条消息

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

我想知道如何自定义此错误消息.

jav*_*d m 5

根据#937 中的@ driesvints,Laravel Passport 正在努力开发一种简化的方法来自定义 Passport 的错误。在此之前,您可以使用以下代码。我测试并使用了它们。

  1. 在页面 App\Providers\AppServiceProvider.php 添加:
use Laravel\Passport\Http\Controllers\AccessTokenController;

...
Run Code Online (Sandbox Code Playgroud)
use Laravel\Passport\Http\Controllers\AccessTokenController;

...
Run Code Online (Sandbox Code Playgroud)
  1. 制作这个页面: App\myOAuth\AccessTokenController.php
public function register()
    {
        $this->app->bind( AccessTokenController::class, \App\myOAuth\AccessTokenController::class);
    }
Run Code Online (Sandbox Code Playgroud)
  1. App\Exceptions\Handler.php 添加自定义异常
<?php

namespace App\myOAuth;

use GuzzleHttp\Exception\ClientException;
use Laravel\Passport\Http\Controllers\AccessTokenController as PassportAccessTokenController;
use League\OAuth2\Server\Exception\OAuthServerException;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response as Psr7Response;

class AccessTokenController extends PassportAccessTokenController
{
    /**
     * Authorize a client to access the user's account.
     *
     * @param  ServerRequestInterface $request
     *
     * @return \Psr\Http\Message\ResponseInterface
     * @throws \League\OAuth2\Server\Exception\OAuthServerException
     */
    public function issueToken(ServerRequestInterface $request)
    {
        try {
            return $this->server->respondToAccessTokenRequest($request, new Psr7Response);
        } catch (ClientException $exception) {
            $error = json_decode($exception->getResponse()->getBody());

            throw OAuthServerException::invalidRequest('access_token', object_get($error, 'error.message'));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 0

您可以在laravel/passport github issues中找到答案。所需要做的就是用不同的实现替换 Laravel\Passport\Http\Controllers\AccessTokenController 。