SNS 로그인 기능(oauth 인증)에 빠지고 싶다면.【구글편】

13152 단어 PHP

이번 목적

  • 간단하게 로그인할 수 있는 기능을 만들고 싶다
  • 오랜만에 SNS 로그인 기능 설치 복습하고 싶어
  • 가벼운 마음으로 시작하면 믿을 수 없을 정도로 빠져들기 때문에 미리 공유한다.
    그나저나 로그인 기능이 전부는 아니에요.
    페이지를 방문해 인증 다이아몬드 로그에서'인증 버튼'을 누르면 자신의 아이디와 이름 등의 정보가 화면에 표시될 수 있으니 양해 바랍니다.

    ■ 애플리케이션 로그인


    우선 https://code.google.com/apis/console/로 새 프로젝트를 만듭니다.
    페이지 위의 프로젝트 작성을 클릭합니다.
    그러면 다음 화면이 나타납니다. 프로젝트 이름을 입력한 후 [제작]을 누릅니다.

    ■ 인증 정보 제작


    인증 정보를 작성하여 필요한 정보
    - 클라이언트 ID
    - 클라이언트 기밀

    1.Outh 동의 화면을 설정합니다.
    사이트 이름 등을 입력하고 저장합니다.

    2. 그리고'인증정보'를 누르면'인증정보'가 화면에 나오기 때문에'인증정보 제작'을 누릅니다.
    그러면 몇 가지 항목이 나오기 때문에 "OAuth 클라이언트 ID"를 선택해서 계속 진행하세요.

    3. 응용 프로그램의 종류를 묻기 때문에 '웹 응용 프로그램' 을 선택하십시오.
    구글에서 정보를 얻고 사이트로 돌아갈 때 표시되는 페이지의 URL을 아래 빨간색으로 입력하십시오.

    입력한 후 '제작' 을 누르면 다음과 같이 '클라이언트 ID' 와 '클라이언트 기밀' 을 만들 것입니다. 미리 적어 주십시오.

    OK 를 누르면 초기 화면으로 돌아갑니다.
    다시 확인하거나 편집하려는 경우 작성된 인증 정보가 목록으로 표시되므로 선택하여 편집할 수 있습니다.

    ■ 인증 페이지에 메시지 보내기


    방금 받은 클라이언트 ID 및 클라이언트 기밀 정보를 실제 인증 페이지에 전송합니다.
    CONSUMER_KEY에서 방금 받은 클라이언트 ID 입력
    CALLBACK_URL에 정보를 가져올 때 반환되는 페이지의 URL을 입력합니다.
    (인증 정보를 작성할 때 승인된 URI 리디렉션 URL 입력)
    index.php
    <?php
    // アプリケーション設定
    define('CONSUMER_KEY', 'クライアント ID');
    define('CALLBACK_URL', '情報を取得して返ってくるページのURL');
    
    // URL
    define('AUTH_URL', 'https://accounts.google.com/o/oauth2/auth');
    
    
    $params = array(
      'client_id' => CONSUMER_KEY,
      'redirect_uri' => CALLBACK_URL,
      'scope' => 'https://www.googleapis.com/auth/userinfo.profile',
      'response_type' => 'code',
    );
    
    // 認証ページにリダイレクト
    header("Location: " . AUTH_URL . '?' . http_build_query($params));
    ?>
    
    이렇게 실제 사이트에 연결된 URL은 다음과 같이 표시될 것이다.

    "허가"를 누르면 화면이 이동해서 지정한 웹 페이지에서 항상 자신의 정보를 얻을 수 있습니다.

    ■ 정보 얻기


    oauth.php
    <?php
    // アプリケーション設定
    define('CONSUMER_KEY', 'クライアント ID');
    define('CONSUMER_SECRET', 'クライアント シークレット');
    define('CALLBACK_URL', '情報を取得して返ってくるページのURL');
    
    define('TOKEN_URL', 'https://accounts.google.com/o/oauth2/token');
    define('INFO_URL', 'https://www.googleapis.com/oauth2/v1/userinfo');
    
    $params = array(
      'code' => $_GET['code'],
      'grant_type' => 'authorization_code',
      'redirect_uri' => CALLBACK_URL,
      'client_id' => CONSUMER_KEY,
      'client_secret' => CONSUMER_SECRET,
    );
    
    $params = http_build_query($params, "", "&");
    
    $header = array(
      'Content-Type: application/x-www-form-urlencoded',
      'Content-Length: ' .strlen($params)
    );
    
    // POST送信
    $options = array('http' => array(
      'method' => 'POST',
      'header' => implode("\r\n", $header),
      'content' => $params
    ));
    
    // アクセストークンの取得
    $res = file_get_contents(TOKEN_URL, false, stream_context_create($options));
    
    // レスポンス取得
    $token = json_decode($res, true);
    if(isset($token['error'])){
      echo 'エラー発生';
      exit;
    }
    
    $access_token = $token['access_token'];
    
    $params = array('access_token' => $access_token);
    
    // ユーザー情報取得
    $res = file_get_contents(INFO_URL . '?' . http_build_query($params));
    
    //表示
    echo $res;
    ?> 
    
    상술한 코드는 이미 수정되었지만, 실제로는
    Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded
    의 오류입니다.
    왜냐하면 조사는 제목이 없는 정보처럼 잘못된 거니까.
    oauth.php
    $header = array(
      'Content-Type: application/x-www-form-urlencoded',
      'Content-Length: ' .strlen($params)
    );
    
    ▶ 수정 전
    oauth.php
    // POST送信
    $options = array('http' => array(
      'method' => 'POST',
      'content' => http_build_query($params)
    ));
    
    ▶ 수정 후
    oauth.php
    $params = http_build_query($params, "", "&");
    
    $header = array(
      'Content-Type: application/x-www-form-urlencoded',
      'Content-Length: ' .strlen($params)
    );
    
    // POST送信
    $options = array('http' => array(
      'method' => 'POST',
      'header' => implode("\r\n", $header),
      'content' => $params
    ));
    
    그게 다야.
    SNS 로그인을 도와드리면 좋겠습니다.

    좋은 웹페이지 즐겨찾기