카카로 싱크 로그인 시 매번 로그인을 강제로 하게 하려면?

문의 시, 사용하시는 SDK 버전 정보와 디벨로퍼스 앱ID를 알려주세요.
___ Kakao.Auth.authorize({
redirectUri: ‘https://sslearn.store/shop/sns_kakao/kakao_login_redirect.php’,
})

여기에,

            Kakao.Auth.authorize({
                redirectUri: 'https://sslearn.store/shop/sns_kakao/kakao_login_redirect.php',
                prompt: 'login'
            })

이라고 했더니, 오류가 나네요…ㅠㅠ
클라이언트 ID는 8f218a1c6cfb13eb3c6c0c784f59ec5a 입니다.

안녕하세요.

확인을 위해 어떤 오류인지 내용 첨부 부탁드립니다.

kakao.min.js:99 Uncaught Xt {name: 'KakaoError', message: 'Invalid parameter keys: prompt at Auth.authorize', stack: 'Error\n    at https://t1.kakaocdn.net/kakao_js_sdk/…kaocdn.net/kakao_js_sdk/2.1.0/kakao.min.js:99:215'}

JS SDK 2.3.0 버전부터 prompt 파라미터 사용할 수 있으며 사용하고 계시는 이전 버전에서는 prompts (<- s 붙음) 파라미터를 사용하셔야 합니다.

최신 버전으로 업데이트 하시는게 좋을것 같습니다.

그누보드에서 카카오 로그인의 경우에 동일한 문제가 있습니다.
아마 RestAPI를 이용하는 것 같습니다.

아래와 같이

“prompts” => "login"도 넣어보고, “prompt” => "login"도 넣어봐도 체크없이 바로 로그인됩니다…ㅠㅠ

어떻게 해야 할까요?

url은 https://bit-radar.io/bbs/login.php 입니다.

private function authenticate($code)
    {
        $params = array(
            "grant_type"    => "authorization_code",
            "client_id"     => $this->api->client_id,
            "redirect_uri"  => $this->api->redirect_uri,
            "code"          => $code,
            "prompts"      => "login"
        );

        if( $this->api->client_secret && ($this->api->client_secret !== $this->api->client_id) ){
            $params['client_secret'] = $this->api->client_secret;
        }

        $response = $this->request($this->api->token_url, $params, $this->api->curl_authenticate_method);
        $response = $this->parseRequestResult($response);
        if ( ! $response || ! isset($response->access_token) ) {
            throw new Exception("The Authorization Service has return: " . $response->error);
        }
        if ( isset($response->access_token) )  $this->api->access_token            = $response->access_token;
        if ( isset($response->refresh_token) ) $this->api->refresh_token           = $response->refresh_token;
        if ( isset($response->expires_in) )    $this->api->access_token_expires_in = $response->expires_in;

        // calculate when the access token expire
        if ( isset($response->expires_in) ) {
            $this->api->access_token_expires_at = time() + $response->expires_in;
        }

        return $response;
    }

full소스는다음과 같습니다.

여기에 코드를 입력<?php
/**
 * Copyright (c) 2014 Team TamedBitches.
 * Written by Chuck JS. Oh <jinseokoh@hotmail.com>
 * http://facebook.com/chuckoh
 *
 * Date: 11 10, 2014
 * Time: 01:51 AM
 *
 * This program is free software. It comes without any warranty, to
 * the extent permitted by applicable law. You can redistribute it
 * and/or modify it under the terms of the Do What The Fuck You Want
 * To Public License, Version 2, as published by Sam Hocevar. See
 * http://www.wtfpl.net/txt/copying/ for more details.
 *
 */

//https://github.com/jinseokoh/additional-providers
class Hybrid_Providers_Kakao extends Hybrid_Provider_Model_OAuth2
{
    /**
     * initialization
     */
    function initialize()
    {
        parent::initialize();

        // Provider API end-points
        $this->api->api_base_url = "https://kapi.kakao.com/v2/";
        $this->api->authorize_url = "https://kauth.kakao.com/oauth/authorize";
        $this->api->token_url = "https://kauth.kakao.com/oauth/token";

        // redirect uri mismatches when authenticating with Kakao.
        if (isset($this->config['redirect_uri']) && !empty($this->config['redirect_uri'])) {
            $this->api->redirect_uri = $this->config['redirect_uri'];
        }
    }

    /**
     * finish login step
     */
    function loginFinish()
    {
        $error = (array_key_exists('error', $_REQUEST)) ? $_REQUEST['error'] : "";
        // check for errors
        if ($error) {
            throw new Exception("Authentication failed! {$this->providerId} returned an error: $error", 5);
        }
        // try to authenicate user
        $code = (array_key_exists('code', $_REQUEST)) ? $_REQUEST['code'] : "";
        try {
            $this->authenticate($code);
        } catch (Exception $e) {
            throw new Exception("User profile request failed! {$this->providerId} returned an error: $e", 6);
        }
        // check if authenticated
        if (!$this->api->access_token) {
            throw new Exception("Authentication failed! {$this->providerId} returned an invalid access token.", 5);
        }
        // store tokens
        $this->token("access_token", $this->api->access_token);
        $this->token("refresh_token", $this->api->refresh_token);
        $this->token("expires_in", $this->api->access_token_expires_in);
        $this->token("expires_at", $this->api->access_token_expires_at);
        // set user connected locally
        $this->setUserConnected();
    }

    /**
     * load the user profile
     */
    function getUserProfile()
    {
        //$params = array('property_keys'=>'kaccount_email');	// v1 parameter
        $params = array('property_keys' => array('kakao_account.email'));        // v2 parameter

        $this->api->decode_json = false;
        $this->api->curl_header = array('Authorization: Bearer ' . $this->api->access_token);

        $data = $this->api->api("user/me", "POST", $params);

        if (!isset($data->id)) {
            throw new Exception("User profile request failed! {$this->providerId} returned an invalid response.", 6);
        }
        # store the user profile.
        $this->user->profile->identifier = @ $data->id;
        $this->user->profile->displayName = @ $data->properties->nickname;
        $this->user->profile->photoURL = @ $data->properties->thumbnail_image;
        //$email = @ $data->properties->kaccount_email;	// v1 version

        $email = @ $data->kakao_account->email;   // v2 version

        if ($email) {
            $this->user->profile->email = $email;
        }

        $this->user->profile->sid = get_social_convert_id($this->user->profile->identifier, $this->providerId);

        return $this->user->profile;
    }

    private function authenticate($code)
    {
        $params = array(
            "prompts" => "login",
            "prompt" => "login",
            "grant_type" => "authorization_code",
            "client_id" => $this->api->client_id,
            "redirect_uri" => $this->api->redirect_uri,
            "code" => $code,
        );

        if ($this->api->client_secret && ($this->api->client_secret !== $this->api->client_id)) {
            $params['client_secret'] = $this->api->client_secret;
        }

        $response = $this->request($this->api->token_url, $params, $this->api->curl_authenticate_method);
        $response = $this->parseRequestResult($response);
        if (!$response || !isset($response->access_token)) {
            throw new Exception("The Authorization Service has return: " . $response->error);
        }
        if (isset($response->access_token)) $this->api->access_token = $response->access_token;
        if (isset($response->refresh_token)) $this->api->refresh_token = $response->refresh_token;
        if (isset($response->expires_in)) $this->api->access_token_expires_in = $response->expires_in;

        // calculate when the access token expire
        if (isset($response->expires_in)) {
            $this->api->access_token_expires_at = time() + $response->expires_in;
        }

        return $response;
    }

    private function request($url, $params = false, $type = "GET")
    {

        //$params['prompts'] = "login";
        //$params['prompts'] = "login";
        if (Class_exists('Hybrid_Logger')) {
            Hybrid_Logger::info("Enter OAuth2Client::request( $url )");
            Hybrid_Logger::debug("OAuth2Client::request(). dump request params: ", serialize($params));
        }
        $this->http_info = array();
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, $this->api->curl_time_out);
        curl_setopt($ch, CURLOPT_USERAGENT, $this->api->curl_useragent);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->api->curl_connect_time_out);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $this->api->curl_ssl_verifypeer);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $this->api->curl_header);

        if ($this->api->curl_proxy) {
            curl_setopt($ch, CURLOPT_PROXY, $this->curl_proxy);
        }
        if ($type == "POST") {
            curl_setopt($ch, CURLOPT_POST, 1);
            if ($params) curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
        }

        $response = curl_exec($ch);
        if (Class_exists('Hybrid_Logger')) {
            Hybrid_Logger::debug("OAuth2Client::request(). dump request info: ", serialize(curl_getinfo($ch)));
            Hybrid_Logger::debug("OAuth2Client::request(). dump request result: ", serialize($response));
        }
        $this->http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $this->http_info = array_merge($this->http_info, curl_getinfo($ch));
        curl_close($ch);

        return $response;
    }

    private function parseRequestResult($result)
    {
        if (json_decode($result)) return json_decode($result);
        parse_str($result, $ouput);
        $result = new StdClass();
        foreach ($ouput as $k => $v)
            $result->$k = $v;

        return $result;
    }
}하거나 붙여 넣으세요

안녕하세요.

prompt 파라미터는 인가코드 요청 시 사용되는 파라미터로
기존 사용자 인증 여부와 상관없이 사용자에게 카카오계정 로그인 화면을 출력하여 다시 사용자 인증을 수행하고자 할 때 사용 합니다.

제공해 주신 코드는 접근토큰 발급 코드로 보입니다.


다른이야기지만, 서비스는 아래 운영정책을 위반하는 콘텐츠를 제공하는 서비스는 디벨로퍼스에서 기능을 사용할 수 없습니다.

제4조(금지된 내용)
3. 금융감독원에 미등록된 유사투자자문업, 주식투자자문업 등 관련 법률이 요구하는 자격/요건을 갖추지 않고 주식/증권 정보 또는 서비스를 제공하는 내용 (예: 무허가 주식리딩 서비스, 상담 서비스, 카피 트레이딩, AI 자동매매 등)

서비스가 아직 개발중인 것으로 보입니다만, 추후 서비스 내용 중 위 운영정책 위반 사례가 발견 될 경우 디벨로퍼스 기능 이용이 불가할 수 있음을 안내 드립니다.