2017-11-11 2 views
1

나는 여기 어떻게 PHP에서 구글에서 로그인 후 마지막 링크로 리디렉션?

FB, Gmail을 통해 로그인 후 마지막 링크로 사용자를 리디렉션하는 내가하려고했던 네 가지를하는 것을 시도하고 있지만 성공

1) 사용자 $_SERVER['HTTP_REFERER'] 가지고하지 않습니다하지만 대신 다시 Gmail로 나를 리디렉션 내 사이트의 마지막 링크 내가 로그인하기 전에 세션에서 마지막으로 URL을 저장하려고하지만 세션이 비어로 로그인 후에 내가 그 값을 얻을하지 않습니다 - $_SESSION 사용

2). 쿠키를 사용

3) - 나는 또한 cokkies을 사용하려고하지만 그것도 내가 리디렉션 URL에 $_GET 매개 변수로 마지막 URL을 보내려고

4

)를 작업 만하고 해당 URL이 일치하지 않는 즉 구글 로그인을 중지하지 않습니다 URL을 Google 앱에 저장합니다.

을 실현하려 다른 방법이 있습니까?

답변

1

나는 볼 수 없습니다. 사용자를 Authorization Server로 재지 정하기 전에 현재 URL을 쿠키에 저장하십시오. 는 AS가 redirect_uri 다시 사용자를 리디렉션하는 경우, 해당 페이지는 쿠키에 저장되어있는 URL에 다른 리디렉션을 수행합니다.

하지만 요청에 "마지막 페이지 URL"(목록의 네 번째 요소)을 포함하는 버전을 좋아합니다. 구글은 분명히 자신의 OAuth 구성에서 와일드 카드를 허용하지 않기 때문에, 대신 state 매개 변수를 사용할 수 있습니다. RFC 6749 - The OAuth 2.0 Authorization Framework에서 :

state 
    RECOMMENDED. An opaque value used by the client to maintain 
    state between the request and callback. The authorization 
    server includes this value when redirecting the user-agent back 
    to the client. The parameter SHOULD be used for preventing 
    cross-site request forgery as described in Section 10.12. 

당신이 당신의 리디렉션 URL을 구축

, 당신은 너무처럼 state 매개 변수를 설정합니다

https://accounts.google.com/o/oauth2/v2/auth 
    ?client_id=MY_CLIENT_ID 
    &redirect_uri=http://example.com/oauth-redirect_uri 
    &scope=REQUESTED_SCOPES 
    &state=http://example.com/last-page-the-user-loaded 

당신의 OAuth 흐름에 따라, 인증 서버는 URL로 사용자를 리디렉션 것 어느 정도 성공 승인에 따라 다음과 같습니다

http://example.com/oauth-redirect_uri 
    ?code=CODE 
    &state=http://example.com/last-page-the-user-loaded 

다음 state 매개 변수를 처리 할 수있는 서버 그에 따라 사용자를 리디렉션합니다.

+0

답장을 보내 주셔서 감사합니다. @paolo 나는 이것을 시도하고 작동 여부를 알려줍니다. –

+0

감사합니다 그 상태 매개 변수 솔루션은 Google 로그인을 위해 일했습니다 .. 페이 스북 로그인에도 같은 매개 변수가 있습니까? 거기에 상태 매개 변수를 찾을 수 없기 때문에 –

+0

OAuth 프로토콜을 준수하고 완전히 구현 한 경우 이는 Google과 동일하게 작동합니다. 하지만 페이스 북 로그인에 대해서는 아무 것도 몰라요. 미안 해요. – paolo

1

사용자가 일부 기능을 사용하여 로그인했는지 여부를 확인하고 그렇지 않은 경우 사용자가 Google 또는 FB를 사용하여 로그인 할 수있는 로그인 페이지로 이동하게됩니다. 는 내가 내가 코드를 작성하고, 사용자가 또는 기록되지 않은 경우 당신이 확인되는 동일한 기능의 세션에서 이전 링크를 저장,

말할 것이 가정 그리고 당신은 그것에서 아이디어를 얻을 수 있습니다 특정 코드를 작성하십시오.

if(isset($_SERVER['HTTP_REFERER'])) 
{ 
    $_SESSION['url_to_go'] = $_SERVER['HTTP_REFERER']; 
} 

그리고 url_to_go 키 세션이있는 경우 성공적으로 사용자가 로그인, 검사 할 때, 다음 링크로 사용자를 리디렉션 또는 다른 대시 보드 또는 당신이 가지고있는 기본 페이지로 데려가.

소셜 사이트에서 돌아올 때 세션이 해제되면서 JS (브라우저 저장 용량)와 함께 localStorage을 사용하여 $_SERVER['HTTP_REFERER']을 저장하고 돌아 왔을 때 검색하고 지울 수 있습니다 한 번 사용하십시오. 사용하여 쿠키가 작동하지 않을 이유

+0

로그인 페이지가 없습니다. 모든 페이지의 헤더에 fb/google 로그인 버튼이있는 팝업이 있습니다. 나는 세션을 사용하여 시도했지만'$ _SESSION'은 소셜 미디어에서 돌아온 후에 지워집니다. –

+0

ok @VinitSingh, 다른 해결책으로 답변을 업데이트했습니다. 마지막 단락 –

+0

@VinitSingh를 읽으셨습니까? –