首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以创建一个中间件来执行guzzle请求吗?

我可以创建一个中间件来执行guzzle请求吗?
EN

Stack Overflow用户
提问于 2021-03-18 22:09:50
回答 1查看 100关注 0票数 1

我需要检查spatie/laravel-permission提供的用户角色,我想知道是否可以在中间件中创建一个在每条路径上执行的guzzle请求。

对于API,我使用Laravel/Passport。

对其他/更好方法的建议也是受欢迎的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-14 18:05:32

Guzzle请求使用了以下代码:

代码语言:javascript
复制
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use Session;

class CheckPermission
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next, $requiredRoles="none")
    {

        $response = Http::withToken(Session::get('accessToken'))->withHeaders([
                    "User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
                    "Origin" => "http://base.fourdesign-test.nl",
                    'Content-Type' => "application/json",
                    "Access-Control-Allow-Origin" => '*'])->withOptions(['base_uri' => env('API_URL')])->get("/api/checkpermission");

        if(!$response) {
            die();
        }

        if($requiredRoles == "none" && empty($response['userRoles'])) {
            return $next($request);
        } else if(empty($response['userRoles'])) {
            return redirect('/login');
        }

        $requiredRoles = explode("|", $requiredRoles);
        $allowRequest = false;
        foreach ($response['userRoles'] as $userRole) {
            Session::put($userRole, true);
            foreach ($requiredRoles as $requiredRole) {
                if ($requiredRole == 'none') {
                    $allowRequest = true;
                }
                if ($requiredRole == $userRole) {
                    $allowRequest = true;
                }
            }
        }

        if ($allowRequest === true) {
            return $next($request);
        }

        return redirect()->back();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66692824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档