질문을 삭제하지 말아주세요.!
 
1
0
-1
얼마전 까지는 잘되다가 몇시간 전부터 계속해서 이런 오류가 나면서 소셜로그인이 되질 않습니다. InvalidStateException in ~myapp2\vendor\laravel\socialite\src\Two\AbstractProvider.php line 200: dd()로 본 결과 public function handleProviderCallback($provider) { $user = \Socialite::driver($provider)->user(); <---- 여기서 에러발생 dd("d"); 이렇습니다. 구글링해봐도 잘 되질않아서 질문올립니다. 감사합니다.
    CommentAdd your comment...

    2 answers

    1.  
      1
      0
      -1

      저는 위 에러 파일에서 set() 을 put()으로 변경해서 해결했습니다.

      https://github.com/laravel/framework/issues/17397

      composer update를 하면 결국 돌아가더라구요. socialite 버전을 조금 낮추시는것을 추천드립니다...


      1. 이용준

        아아감사합니다.   알고보니 제가 설정을 가상호스트?도메인? 으로 설정해놓고선 localhost로 접속하면 소셜로그인이 안되더라구요ㅠㅠ  항상 가상호스트로 접속하면 됩니다ㅎㅎ

      CommentAdd your comment...
    2.  
      1
      0
      -1

      소셜 로그인을 위한 콜백 URL은 제3자 서비스에서 되돌아올 때만 유효합니다. 예를들어 facebook 을 이용한 로그인을 시도할 때 콜백 URL은 facebook이 리다이렉트 해서 되돌아오는 경우에만 유효한 것입니다.

      겪고 계신 문제는 제3자 서비스를 이용한 로그인 이후 단계에서 뭔가 문제가 발생하여(예를들어 validation 실패) 소셜 로그인을 위한 콜백 URL로 되돌아갔기 때문으로 보입니다. 

      handleProviderCallback() 메소드의 코드를 올려주시면 조금 더 자세한 답을 드릴 수 있을 것 같습니다.




      1. 이용준

        답변 감사합니다. 소스코드 올리겟습니다!

        public function handleProviderCallback($provider)
            {
        	  //dd("d"); //이 부분 주석 해제시에는 d가 찍혔습니다.
              $user = \Socialite::driver($provider)->user();
              dd("d");  //이부분이 실행되지 않습니다.
        
              $user = (\App\User::whereEmail($user->getEmail())->first())
              ?: \App\User::create([
                'name' => $user->getName()?:'unknown',
                'email' => $user->getEmail(),
                'activated' =>1,
              ]);
        
              auth()->login($user);
              flash( auth()->user()->name . "님 환영합니다.");
        
              return redirect('home');
            }
      2. 김주원

        아래와 같이 했을 때는 어떤 결과가 나오나요?

        $user = \Socialite::driver($provider)->user();
        dd($user);


        그리고, 위에서 소셜 사용자 객체(\Laravel\Socialite\Contracts\User)가 잘 덤프된다면, 다음과 같이 코드를 바꾸어 라라벨 로그에 어떤 예외가 찍히는 지 확인해 주세요.


        try {
            $user = (\App\User::whereEmail($user->getEmail())->first())
                ?: \App\User::create([
                'name' => $user->getName()?:'unknown',
                'email' => $user->getEmail(),
                'activated' =>1,
                ]);
        } catch (\Exception $e) {
            \Log::debug($e);
            throw $e;
        }
      3. 이용준

        오늘은 이상하게 또 

        $user = \Socialite::driver($provider)->user();
        dd($user);

        여기서 로그인 정보가 잘뜨며 로그인이 정상적으로 됩니다, 밑에 코드에도 catch 할게 없어서 로그도 안찍히구요.... 왜 될땐 되는거고 안될땐 안되는걸까요?

      4. 이용준
        $user = \Socialite::driver($provider)->user();
        dd($user);

        갑자기 또 이부분 실행하니까 에러가 납니다.

        InvalidStateException in C:\Users\SAMSUNG\myapp2\vendor\laravel\socialite\src\Two\AbstractProvider.php line 200:   

        이런 에러입니다... 어짜다가 되고 어쩌다가 안되고...이유르 모르겟습니다.

      5. 김주원

        Oauth 과정의 시작부터 끝까지 세션에 state 값을 유지합니다. 세션 값을 계속 추적해 보시면 답을 찾을 수 있을 겁니다. Oauth를 처음 요청하는 URL 스킴/DNS/포트와 콜백을 받는 스킴/DNS/포트가 다르지 않은지도 확인해주세요. (http://127.0.0.1 → x → http://localhost:8000 이렇게는 안됩니다.) 


        https://github.com/laravel/socialite/blob/3.0/src/Two/AbstractProvider.php#L142-L144

         

      CommentAdd your comment...