Overtrue\LaravelWechat\Middleware\OAuthAuthenticate::handle PHP Method

handle() public method

Handle an incoming request.
public handle ( Illuminate\Http\Request $request, Closure $next, string | null $scopes = null ) : mixed
$request Illuminate\Http\Request
$next Closure
$scopes string | null
return mixed
    public function handle($request, Closure $next, $scopes = null)
    {
        $isNewSession = false;
        $onlyRedirectInWeChatBrowser = config('wechat.oauth.only_wechat_browser', false);
        if ($onlyRedirectInWeChatBrowser && !$this->isWeChatBrowser()) {
            if (config('debug')) {
                Log::debug('[not wechat browser] skip wechat oauth redirect.');
            }
            return $next($request);
        }
        $scopes = $scopes ?: config('wechat.oauth.scopes', ['snsapi_base']);
        if (is_string($scopes)) {
            $scopes = array_map('trim', explode(',', $scopes));
        }
        if (!session('wechat.oauth_user') || $this->needReauth($scopes)) {
            if ($request->has('state') && $request->has('code')) {
                session(['wechat.oauth_user' => $this->wechat->oauth->user()]);
                $isNewSession = true;
                Event::fire(new WeChatUserAuthorized(session('wechat.oauth_user'), $isNewSession));
                return redirect()->to($this->getTargetUrl($request));
            }
            session()->forget('wechat.oauth_user');
            return $this->wechat->oauth->scopes($scopes)->redirect($request->fullUrl());
        }
        Event::fire(new WeChatUserAuthorized(session('wechat.oauth_user'), $isNewSession));
        return $next($request);
    }