2

毎回ホームページではなく、ユーザーがアクセスしようとしていたリンクにユーザーを誘導するように、標準の Authlogic アプリをどのように適応させることができるでしょうか?

例 1 - 標準ログインは期待どおりに機能します

User goes to app.com
Goes through 'login' process
Redirected to home_url

例 2 - ユーザーが特定のページにアクセスしようとする

User goes to app.com/specific_link
Redirected to login_url for authentication
Expects to be sent back to /special_link; instead sent to home_url

例 2 で必要なリンクにユーザーを戻すにはどうすればよいですか?

4

4 に答える 4

1

ログイン時にページを保存し、それを使用してログイン後にユーザーをそのページに戻します。

# redirect to the login page. Call this in the login action, when successful.
def redirect_away(*params)
  session[:original_uri] = request.request_uri
  redirect_to(*params)
end

# returns to the original url from a redirect_away or to a default url
def redirect_back(*params)
  uri = session[:original_uri]
  session[:original_uri] = nil
  if uri
    redirect_to uri
  else
    redirect_to(*params)
  end
end
于 2013-04-22T16:19:33.740 に答える
1

Michael は近かったのですが、リクエスト オブジェクトの「request_uri」メソッドはありません。

Murifox も近かったのですが、#referrer では欲しい情報が得られません。おそらく #url が必要です。

これを試してください(「認証済み」がログイン状態を返すと仮定します):

before_filter :check_authentication
.
.
.
private

def check_authentication
  unless authenticated
    session[:intented_page] = request.url
    redirect_to login_page
  end
end

次に、ログインを処理するコントローラーで、ログインが成功した後、次のようにします。

redirect_to session[:intended_page]

ちなみに、#referrer メソッドはもともと #referer とスペルが間違っていました。現在はエイリアスが存在するため、両方のスペルが機能しますが、辞書によると「referrer」が適切です。

(後で編集):実際には #referrer が必要な場合があります。認証を確認するときにターゲット URL のコントローラーにいる場合 (ここのコードのように)、#url が必要です。ターゲットコントローラーからリダイレクトされたコントローラーにいる場合は、#referrer が必要です。

于 2013-11-15T01:04:00.533 に答える
0

上記の提案は機能しますが、セッションの使用は最適なオプションではありません Cookie の最大サイズは 4,096 バイトです。これは大したことではなく、かなり長い URL を混在させると、セッション ストアが失敗する可能性があります。

代わりに Cookie メソッドを使用する必要があります。これにより、暗号化されていない (デフォルトで) 別の Cookie が作成され、セッション データが分離されます。

cookies[:original_uri] = { value: request.request_uri, expires: 10.minutes.from_now }

次に、使用するCookieを読み取る

cookies[:original_uri]
于 2016-11-20T22:28:35.380 に答える