Oauth2-server-laravel 自定义消息响应

Posted

技术标签:

【中文标题】Oauth2-server-laravel 自定义消息响应【英文标题】:Oauth2-server-laravel custom message response 【发布时间】:2016-07-10 07:32:27 【问题描述】:

我正在使用Oauth-server-laravel 身份验证。

到目前为止我做了什么:

当我将错误的access_token 发布到我在 laravel 中创建的 API 时,它会给出以下响应,


  "error": "access_denied",
  "error_description": "The resource owner or authorization server denied the request."

我在路由中使用oauth作为中间件,如下所示,

Route::group(['namespace' => 'Modules\User\Http\Controllers', 'middleware' => 'oauth'], function () 

    // Get User Profile Details
    Route::post('getUserProfileDetail', 'UserController@getUserProfileDetail');
);

问题:

如果凭据错误,则 oauth 会自动使用默认消息进行响应,我想自定义该响应消息,

我有一半成功,如果凭据正确,那么它会调用在路由中指定的函数,并且我正在附加我想要发送的 mre 响应。

$response = $this->authorizer->issueAccessToken();

$code = 200; //Response OK
$response['result'] = 'success';
$response['user_id'] = $user['id'];
$response['email'] = $user['email'];
$response['name'] = $user['name'];

但是当凭据不正确时我无法发送它,因为它无法调用函数并将其默认响应发送给用户。

【问题讨论】:

OAuth 有自己的错误格式,但要更改消息,您需要覆盖 OAuthExceptionMiddleware @ImtiazPabel 如果我这样做了,那么当我执行 composer update 时会发生什么,它将自动更新文件并且我的代码将再次覆盖...... 【参考方案1】:

我遇到这种类型的问题是设置自定义消息然后this worked for me(我写的一篇关于这篇文章的博客文章)]

所以先在app/Http/Middleware.创建一个中间件我的中间件名字是OauthExceptionMiddleware

然后打开

app/Http/kernel.php

并把这个中间件而不是oauth2以前的中间件放在$middleware数组中,像这样

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\OauthExceptionMiddleware::class,
    ];

Oauth2 自定义异常错误信息

<?php
/**
 * Created by PhpStorm.
 * User: kingpabel
 * Date: 3/23/16
 * Time: 4:40 PM
 */
namespace app\Http\Middleware;
use Closure;
use League\OAuth2\Server\Exception\OAuthException;
class OauthExceptionMiddleware

    public function handle($request, Closure $next)
    
        try 
            $response = $next($request);
            // Was an exception thrown? If so and available catch in our middleware
            if (isset($response->exception) && $response->exception) 
                throw $response->exception;
            
            return $response;
         catch (OAuthException $e) 
            $data = [
//                'error' => $e->errorType,
//                'error_description' => $e->getMessage(),
                'error' => 'Custom Error',
                'error_description' => 'Custom Description',
            ];
            return \Response::json($data, $e->httpStatusCode, $e->getHttpHeaders());
        
    

【讨论】:

以上是关于Oauth2-server-laravel 自定义消息响应的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 和 oauth 2

Laravel 5.1 oAuth 2 服务器“无效范围”错误

Java自定义注解的使用

自定义UI 自定义布局

自定义UI 自定义布局

自定义UI 自定义布局