2017-11-11 20 views
1

ここphpのgoogleからログインした後、最後のリンクにリダイレクトする方法は?

は、私が試した4つの事がありますが、成功

1を得ていないFB I)は、Gmailでログインした後、最後のリンクにユーザーをリダイレクトするユーザー$_SERVER['HTTP_REFERER']をしようとしています。しかし、それは代わりに戻ってGmailに私をリダイレクト私のサイトの最後のリンクの

2)使用$_SESSION - 私は最後のURLをログイン前にセッションに保存しようとしますが、ログイン後はセッションが空であるためその値を取得しません。クッキーを使用して

3) - 私もcokkiesを使用しようとしますが、それはまた、私はリダイレクトURLで$_GETパラメータとして最後のURLを送信しよう )の作業が、やってそのURLが一致していないとしてそれはGoogleのログインを停止していませんURLをGoogleアプリに保存する

それ以外の方法はありますか?

答えて

1

なぜクッキーを使用できないのか分かりません。ユーザーを認可サーバーにリダイレクトする前に、現行のURLをCookieに保管してください。 ASがユーザーをredirect_uriにリダイレクトすると、そのページはCookieに格納されているURLに別のリダイレクトを行います。

しかし、リクエストに「最後のページURL」を追加したバージョンが好きです(リストの4番目の要素)。 GoogleではOAuth設定でワイルドカードを使用できないようだから、代わりにstateパラメータを使用できます。

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パラメータ設定、::RFC 6749 - The OAuth 2.0 Authorization FrameworkからあなたのOAuthの流れに応じて、

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 

を、認証サーバがそのURLにユーザーをリダイレクトしますやや成功した認可を受けて次のようになります。

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

その後、stateパラメータを処理することができますあなたのサーバーそれに応じてユーザをリダイレクトする。

+0

あなたの答えのためのおかげで@パオロ私はこれを試し、それが働いたかどうかを知らせる。 –

+0

ありがとうございました状態パラメータの解決策はGoogleのログインのために働いた..また、Facebookのログインにそのようなパラメータですか?そこに州のパラメータが見つかりません –

+0

彼らはOAuthプロトコルに従ってそれを完全に実装していれば、これはGoogleと同じように動作するはずです。しかし、私はFacebookのログインについて何も知らない、申し訳ありません。 – paolo

1

ユーザーがログインしているかどうかを確認し、そうでない場合は、ユーザーがGoogleまたはFBを使用してログインできるログインページに移動します。 私は、言うユーザーがログインされているかどうか、あなたがチェックされているのと同じ機能にSESSIONの前のリンクを格納し、

私はコードスニペットを書いていますし、あなたがそこからアイデアを得ることができますこの、 を想定すると、あなたの特定のコードを書く。

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

そしてurl_to_goキーセッションが存在する場合、ユーザーが正常にログインすると、チェックしたときに、そのリンクにユーザーをリダイレクトするか、他のダッシュボードまたはあなたが持っている任意のデフォルトページに彼を取ります。だから、

、あなたは私たちが社会的なサイトから戻ってきたときに、セッションが、クリアなっているあなたは$_SERVER['HTTP_REFERER']を保存するためにJS(ブラウザストレージ)とlocalStorageを使用することができますし、あなたが戻ってきたとき、あなたはそれを取得し、あなたの後に、それをクリアすることができます言ったように一度使用してください。

+0

ログインページはありません。各ページのヘッダーにfb/googleログインボタンが含まれているポップアップがあります。私はセッションを使ってみましたが、ソーシャルメディアから戻ると '$ _SESSION'がクリアされました。 –

+0

ok @VinitSingh、私は別の解決策で自分の答えを更新しました。最後の段落 –

+0

@VinitSinghを読んでみましたか? –