(1) 에러현상: '네이버는 등록되지 않은 임의의 앱(사이트)에서 네이버 아이디로 로그인을 제공하는 것을 제한하고 있습니다.' 에러 메시지 출력
(2) 원인: 하단의 '로그인 오픈 API 서비스 환경'에 설정된 1) 서비스 URL 값이 실제 서비스 URL과 일치하지 않거나 2) 네이버아이디로로그인 Callback URL 값이 잘못된 경우
(3) 조치 방법
- 서비스 URL: 실제 서비스하는 사이트 URL과 동일한지 확인 (www, 포트번호, http/https 구분 없이 도메인명만 정확히 입력)
- Callback URL: 네이버 로그인 후 이동하게되는 URL로서 5개까지 다른 Callback URL 등록 가능
다른건 없는데 안되는 것 보니 뭔가 서비스 URL 에서 땀모님 도메인을 제대로 인식을 못하는 건가 싶네요..
제 가상서버호스팅에서 소셜로그인이 안되서
cafe24웹호스팅 신청해서 설치했습니다.
모두 제대로 입력했고 회원가입을 누르면 네이버 로그인창이 나옵니다
거기서 제 아이디로 접속을 하면
[개발 중 상태에서는 등록된 아이디만 로그인할 수 있습니다.]
이런 메세지가 나오는데 개발중에는 최대20개 까지 된다고 네이버에 나오는데 ... 어떻게 된거죠?
테스트 도메인 : ddammo55.cafe24.com
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Laravel\Socialite\Two\InvalidStateException;
use GuzzleHttp\Exception\ClientException;
use Carbon\Carbon;
use App\Models\SocialLogin;
use App\Models\User;
use App\Models\Config;
use Socialite;
use Auth;
class SocialController extends Controller
{
public $request;
public $userModel;
public $socialModel;
public function __construct(Request $request, User $user, SocialLogin $social)
{
$this->request = $request;
$this->userModel = $user;
$this->socialModel = $social;
}
// 소셜 연결(provider에 해당 provider로 연결 요청)
public function redirectToProvider($provider)
{
$config = $this->getConfig($provider);
// .env가 아닌 DB에서 소셜 키 정보를 가져온다.
public function getConfig($provider)
{
$config = cache('config.sns');
$configArr = get_object_vars($config);
$configArr = array_where($configArr, function ($value, $key) use($provider) {
return str_contains($key, $provider);
});
return new \SocialiteProviders\Manager\Config($configArr[$provider.'Key'], $configArr[$provider.'Secret'], $configArr[$provider.'Redirect'], []);
}
// 소셜인증 후 데이터를 받아서 처리하는 콜백 메서드(config/services.php에서 지정)
public function handleProviderCallback($provider)
{
try {
$config = $this->getConfig($provider);
$userFromSocial = Socialite::with($provider)->setConfig($config)->user();
} catch (InvalidStateException $e) {
return alert('잘못된 접근입니다.');
} catch (ClientException $e) {
return alert('Bad client credentials');
}
// 소셜 로그인
if(auth()->guest()) {
$result = $this->socialModel->socialLoginCallback($userFromSocial, $provider);
if($result == 'view') {
// 소셜 계정을 처음 사용해서 로그인 했을 경우 기존 계정과 연결/ 회원가입 화면으로 연결
$params = $this->socialModel->getSocialParams($provider);
$theme = cache('config.theme')->name ? : 'default';
$skin = cache('config.join')->skin ? : 'default';
return viewDefault("$theme.users.$skin.social", $params);
} else { // 소셜 계정으로 로그인
return redirect(route('home'));
}
} else { // 회원 정보 수정에서 소셜 계정 연결
$message = $this->userModel->connectSocialAccount($userFromSocial, $provider, $this->request);
return view('common.message', [
'message' => $message,
'popup' => 1,
'reload' => 1,
]);
}
}
// 소셜 로그인 -> 회원가입
public function socialUserJoin(Request $request)
{
// 회원가입
$user = $this->userModel->joinUser($request);
// 소셜로그인 정보 등록
$this->socialModel->register($request, $user);
// 가입한 유저 로그인
Auth::login($user);
return redirect(route('home'));
}
// 소셜 로그인 -> 기존 계정과 연결
public function connectExistAccount(Request $request)
{
// 입력한 비밀번호와 인증된 사용자의 비밀번호를 비교한다.
if(Auth::validate(['email' => $request->email, 'password' => $request->password ])) {
$user = User::where('email', $request->get('email'))->first();
// 소셜로그인 정보 등록
$this->socialModel->register($request, $user);
// 회원 정보 업데이트 (회원 등급, 이메일 인증 정보)
$this->userModel->updateUserBySocial($user);
// 가입한 유저 로그인
Auth::login($user);