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);
}