前提・実現したいこと
Googleアカウント認証を実装したサイトを作成しています。
このサイトは仲間内だけが閲覧できるようにするため、Googleのアカウント(gmail)で認証できるようにし、閲覧できるメンバーは管理者が追加するような形にしたいと思っています。
<詳細>
・レンタルサーバー:XFREE
・使用言語:PHP
自分なりに調べてOAuthで認証させ、スプレッドシートなどで作ったリストと比べて閲覧させるなどできるのではないかと考えてネット上のサンプルコードをもとに作っています。
しかし、XFREEではfile_get_contentsが使用できず、以下のようなメッセージが出てきます。cURLに置き換えることができるようですが、よくわからず困っています。
cURLに置き換える方法やこのようなサイトを作るためのほかのアイデアがありましたら、お教えてください。
発生している問題・エラーメッセージ
Warning: file_get_contents(): https:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /home/****/****.php.xdomain.jp/****/callback.php on line 42 Warning: file_get_contents(https://accounts.google.com/o/oauth2/token): failed to open stream: no suitable wrapper could be found in /home/****/****.php.xdomain.jp/****/callback.php on line 42
auth.php
PHP
1<?php 2//パラメタの設定 3$url = "https://accounts.google.com/o/oauth2/auth"; 4$client_id = "クライアントID"; 5$redirect_uri = "リダイレクトURI"; 6$query = ""; 7$query .= "client_id=".urlencode($client_id)."&"; 8$query .= "scope=".urlencode("openid email")."&"; 9$query .= "response_type=".urlencode("code")."&"; 10$query .= "redirect_uri=".urlencode($redirect_uri)."&"; 11$location = $url ."?".$query; 12header("Location: {$location}"); 13exit();// 14?>
callback.php
PHP
1<?php 2//パラメタの設定 3$url = "https://accounts.google.com/o/oauth2/token"; 4$client_id = "クライアントID"; 5$client_secret = "クライアント シークレット"; 6$redirect_uri = "http://****.php.xdomain.jp/callback.php"; 7 8//POSTパラメタの作成 9$query = ""; 10$query .= "code=".urlencode($_GET["code"])."&"; 11$query .= "client_id=".urlencode($client_id)."&"; 12$query .= "client_secret=".urlencode($client_secret)."&"; 13$query .= "redirect_uri=".urlencode($redirect_uri)."&"; 14$query .= "grant_type=".urlencode("authorization_code"); 15 16//HTTPヘッダの設定 17$header = array( 18 "Content-Type: application/x-www-form-urlencoded", 19 "Content-Length: ".strlen($query) 20); 21 22//コンテキストの設定 23$context = array( 24 "http" => array( 25 "method" => "POST", 26 "header" => implode("\r\n", $header), 27 "content" => $query 28 ) 29); 30 31//id token を取得する 32$res_json = file_get_contents($url, false, stream_context_create($context)); 33 34//取得したjsonデータをオブジェクト化 35$res = json_decode($res_json); 36 37//id_token(JWT)を分解 38$val = explode(".", $res->id_token); 39 40//2番目がデータ部分なのでbase64でデコード 41$data_json = base64_decode($val[1]); 42 43//bsae64でデコードしたjsonをオブジェクト化 44$data = json_decode($data_json); 45 46//取得したデータを表示 47print("対象ユーザの識別子:".$data->sub."<br>" ); 48print( "email:".$data->email."<br>"); 49print( "emailが認証済か否か:".$data->email_verified."<br>"); 50 51?>
参考にしたサイト
回答1件
あなたの回答
tips
プレビュー