Google OAuth 2.0を利用して、PHPで情報を取得したいと思いますが、リダイレクトされるURLの部分でうまくいかずに考えこんでいます。もし分かりましたら教えてください。よろしくお願いします。
流れとしては、ログインURL先で許可をリクエストして、次に、リダイレクトされてくるページが表示されません。おそらく原因としては、独自のMVCフレームワークを利用しており、リダイレクト先が例えば、http://example.com/auth/google の場合、index.phpをリライト設定で消しているので、実際は、index.php?/auth/google?code=XXXXXXXXXXXXXX のようにパラメーターが付いてくるので、?が2つになってしまうからだと思われます。?codeの前にスラッシュを置いてブラウザより再度アクセスすると、ちゃんと情報を取得でき表示することが分かります。( auth/google/?code=XXXXXXXXXXXXXX のように)
ただ、これをコードの方で、変更したいのですが、どのうよにすればよいのかがわかません。
ログインURLがあるコントローラーの設定部分。下記のようになっています。
$params = array( 'client_id' => G_KEY, 'redirect_uri' => $this->url.'auth/google', 'approval_prompt' => 'force', 'scope' => 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email', 'response_type' => 'code' ); $g_url = 'https://accounts.google.com/o/oauth2/auth?'.http_build_query($params); $this->view->assign('google',$g_url); //smartyテンプレートにログインURLを渡す。
単純にリダイレクトURLの部分の最後にスラッシュを追加 'redirect_uri' => $this->url.'auth/google/', とすればなんとかなるような気がしたのですが、無理でした。
一方で、表示する側のコントローラーのコードは下記のようになります。こちらのほうは、上記の方で説明したとおり、URLを変えると、取得した情報を表示することができます。
$params = array( 'client_id' => G_KEY, 'client_secret' => G_SECRET, 'code' => $_GET['code'], 'redirect_uri' => $this->url.'auth/google', 'grant_type' => 'authorization_code' ); $url = 'https://accounts.google.com/o/oauth2/token'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); print_r(curl); $rs = curl_exec($curl); curl_close($curl); $json = json_decode($rs); // var_dump($json);exit; // ユーザー情報 $url = 'https://www.googleapis.com/oauth2/v1/userinfo?access_token='.$json->access_token; $me = json_decode(file_get_contents($url)); print_r($me);
また、$this->url = 'http://example.com/' となっております。従って、リダイレクトされるURLは、http://example.com/auth/google となっています。
.htaccess の設定は下記のようになります。
<IfModule mod_rewrite.c> Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule !\.(pdf|ico|gif|jpg|png|css|html|xml)$ index.php </IfModule>
回答1件
あなたの回答
tips
プレビュー