2009-05-21 1 views
0

に戻ってリダイレクトません。 before_filterは、ユーザーがログインしているかどうかを確認します。そうでない場合は、request.request_uriを取得してセッション変数(セッション[:return_to])に入れ、ユーザーを302リダイレクトメッセージでログインページに送ります。ログイン後、ユーザーはセッション[:return_to]のURLにリダイレクトされます。RoRの:私はリソースの一部のための認証を必要とするAuthenticatedSystemを使ってRoRのアプリを持っている</p> <p>:AuthenticatedSystemが正しく、私は今、数日のために、この1に対する私の頭を叩いてきたサファリ

これはIEとFirefoxでうまくいきます。 Safariでは、最初のbefore_filterのrequest.request_uriは空白で、セッションコントローラは常にメインページにリダイレクトされます。

誰もこれまでに遭遇したことはありますか?私が持っている唯一の手掛かりは、Web Inspector for Safariには初期ページのリクエストが表示されず、ログインのリクエストだけが表示されることです。 Firefoxでは、私は両方のリクエストを見ています。ここで

def login_required 
    if !authorized? 
    session[:return_to] = request.request_uri 
    redirect_to new_session_path 
    end 
end 

のセッション/作成:ここで

はbefore_filterだ

def create 
    self.current_user = User.authenticate(params[:login], params[:password]) 
    if logged_in? 
    if params[:remember_me] == "1" 
     current_user.remember_me unless current_user.remember_token? 
     cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at } 
    end 
    redirect_back_or_default('/') 
    flash[:notice] = "Logged in successfully" 
    else 
    flash.now[:error] = "Authentication failed." 
    render :action => 'new' 
    end 
end 

任意のアイデア?だから、

答えて

0

、誰かがこの横切る念のために...

答えは、サードパーティのCookieのSafariの積極的なブロックであるように思われます。このエラーは、ブックマークレットで発生していました。これは、基本的に、ユーザーが使用することを決めると、サードパーティのウェブサイトのDOMに追加されたiframeです(心配しないでください。FriendFeedのブックマークレットに類似していますそれらのサイトから離れることなく他のサイトから)。

とにかく、この状況では、Safariは、Railsが設定しようとしているセッションCookieを、iframe内から設定されていてもサードパーティとして扱います。したがって、リダイレクト時には、すべてのセッション変数が失われています。

2つの解決策は

  • は、フォームデータと一緒に「return_to」URLを渡し、セッションでこれを取得
  • (このオプションを使用して満足していない)サードパーティのCookieを許可するようにユーザーに伝える自分自身を提示コントローラ(より良いオプション)