OAuth가 사용자 JSON 호출 성공 후 /login으로 리다이렉트되는 문제

Oauth 기본 인증 설정이 다소 이상한 동작을 하고 있습니다. 설정 초기에 몇 가지 오류가 있었으나 모두 해결했습니다. 하지만 현재 흐름이 Discourse → Cognito Authorize Endpoint → Discourse Callback → Discourse /login 순서로 진행되고 있습니다. 로그에는 경고나 오류가 없으며, 로그를 확인해 보면 사용자 데이터를 가져오기 위한 JSON 호출이 성공적으로 이루어진 것을 볼 수 있습니다.

토큰이 성공적으로 발급되고 JSON 데이터가 로드된 것으로 보이므로, 사용자 계정이 성공적으로 등록되어야 한다고 생각했지만, 대신 사용자가 로그인 페이지로 리다이렉트되고 있습니다.

아래 로그를 확인해 주세요.

OAuth2 디버깅: after_authenticate 응답: creds: {"token"=>"eyJraWQiOiJ3YW8zbVBRWmh2Z2F6YldNaU5jS3ZOdVdRMXRmcm1ya2ZVZ2RvVjVYSG1RPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJkNzhkZDliNS03Mjc2LTQ5OWEtYjdiN
오후 3:48
OAuth2 디버깅: user_json_url: GET https://api.lifebac.com/token/details?token=eyJraWQiOiJ3YW8zbVBRWmh2Z2F6YldNaU5jS3ZOdVdRMXRmcm1ya2ZVZ2RvVjVYSG1RPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJkNzhkZDliNS03Mjc
오후 3:48
OAuth2 디버깅: user_json_response: #<Excon::Response:0x00007f36a7608a30 @data={:body=>"{\"id\":\"d78dd9b5-7276-499a-b7b6-02da38e03ce9\", ...}", :cookies=>[], :host=>"api.lifebac.com", :headers=>{"Conten
오후 3:48
OAuth2 디버깅: user_json: {"id"=>"d78dd9b5-7276-499a-b7b6-02da38e03ce9", ...}

무슨 일이 일어나고 있는지 알려 주시면 큰 도움이 될 것입니다. 필요하면 백트레이스도 기꺼이 제공하겠습니다.

리다이렉션은 정상적인 동작이지만, 회원가입 팝업도 함께 표시되어야 합니다. 팝업이 표시되고 있나요?

사용자가 계정 정보를 확인하고 생성 버튼을 누른 후에야 사용자 계정이 생성됩니다.

데이비드님,

불행히도, 해당 정보는 확인 가능한 내용이 전혀 없는 빈 상태로 표시됩니다. 모든 정보를 직접 입력해야만 확인이 가능합니다.

또한, 사용자를 자동으로 확인하는 것이 가능한가요? 이메일은 이미 저희 쪽에서 인증이 완료된 상태이며, 사용자에게 최대한 매끄러운 경험을 제공하고자 합니다.

현재 팝업을 건너뛰는 것은 불가능하지만, 아이덴티티 제공자(IdP)에서 가져온 데이터로 자동으로 채워져야 합니다.

oauth2 설정 값은 무엇인가요? oauth2_json_email_path를 예로 들어 보겠습니다.

또한, 로그에서 “user_json” 줄 전체를 공유해 주시겠습니까? 이렇게 하면 모든 키를 확인할 수 있습니다. (이메일 주소는 삭제하셔도 됩니다.)

전체 데이터는 다음과 같습니다.

{"id"=>"d78dd9b5-7276-499a-b7b6-02da38e03ce9", "username"=>"patrick2"}

해당 필드의 값은 "id"와 "username"이었습니다.

현재 이메일과 이름을 추가하기 위해 엔드포인트를 업데이트하고 있지만, 필요한 필드는 id와 username만 있다고 생각했습니다.

감사합니다

패트릭

Discourse 계정에 연결하는 데 필요한 최소 데이터는 id 하나뿐입니다. 그러나 Discourse에서는 사용자 이름과 이메일이 필요합니다. 그래서 가입 모달을 표시하는 것입니다.

OAuth API에 해당 정보를 추가할 수 있다면, 사용자들의 경험이 훨씬 원활해질 것입니다 :+1:

네, 지금 그 부분을 확인 중입니다. 이메일도 포함되도록 엔드포인트를 업데이트해서 이 문제가 해결되는지 확인해 보겠습니다.

다만, 그렇다면 가입 페이지에 사용자 이름은 최소한 표시되어야 하지 않을까요?

감사합니다

패트릭

그렇습니다. oauth2_json_username_path를 username으로 설정했나요?

@david, 고마워 친구! 데이터로 그 문제를 모두 해결했어.

OAuth 사용자를 자동으로 확인하도록 플래그를 요청하는 올바른 방법은 무엇인가요?

감사합니다

패트릭

'자동 확인’이 정확히 무엇을 의미하나요? 이메일 확인을 건너뛰는 건가요? 아니면 가입 모달을 건너뛰는 건가요?

첫 번째는 이미 가능합니다. 두 번째는 곧 구현할 예정으로 검토 중입니다.

완벽해요! 두 번째를 말한 거였어요! 그런데 이미 알아채셨다면, 아무 문제 없네요!

Automatically provision accounts with external SSO provider? (skip Create New Account prompt) - #6 by david 에서 언급된 새로운 external_auth_skip_create_confirm 설정이 Oauth2에서 지원되나요?

맞아요! 모든 Discourse 인증 제공자(페이스북, GitHub, Google 등 포함)에서 지원됩니다 :smiley: