Аутентификация RESTful: тупая попытка сделать простое перенаправление при проверке подлинности на основе файлов cookie - PullRequest
3 голосов
/ 24 мая 2009

У меня есть приложение RoR, которое использует плагин RESTful Authentication. Все отлично работает. Недавно я включил проверку подлинности на основе файлов cookie, и это тоже отлично работает. Проблема в том, что я хочу изменить целевую страницу по умолчанию, когда пользователь проходит проверку подлинности с помощью файла cookie. Я хочу, чтобы пользователь, прошедший проверку подлинности с помощью cookie, перенаправлялся на ту же страницу, на которую он перенаправлялся при успешном входе в систему из формы входа. Они всегда направлены на исходный URL-адрес запроса. Я ломаю голову над этим, поскольку мне показалось, что я понимаю, как это работает, и каждое внесенное мной изменение, похоже, не оказывает никакого влияния.

Я подозреваю, что это что-то простое, но мне явно не хватает этого. Буду признателен за любые отзывы, рекомендации или предложения, которые вы можете предложить.

Ответы [ 5 ]

1 голос
/ 24 мая 2009

Я решил проблему, но, на мой взгляд, она немного безобразна. Вот что я сделал.

В методе аутентификации cookie я установил переменную сеанса, указывающую, что использовался метод авторизации cookie.

def login_from_cookie
  user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token])
  if user && user.remember_token?
    session[:cookie_login] = true   **# this is my addition**
    self.current_user = user
    handle_remember_cookie! false # freshen cookie token (keeping date)
    self.current_user
  end
end

Затем в: before_filter set_current_user Я просто проверяю эту переменную и перенаправляю, если она установлена, обязательно устанавливая переменную на ноль.

def set_current_user
  Authorization.current_user = current_user
  if session[:cookie_login] 
    redirect_to :controller => :users, :action => :search
    session[:cookie_login] = false
  end
end

Это не красиво, но работает. Я определенно открыт для любых предложений о том, как убрать это.

0 голосов
/ 26 ноября 2009

Restful Authentication сохраняет исходный URL, к которому пытались получить доступ, когда сделан запрос. Все, что вам нужно сделать, - это запретить ему сохранять это значение ИЛИ очистить это значение при выполнении проверки подлинности с использованием cookie, после чего пользователь будет перенаправлен обратно на страницу по умолчанию.

Я бы, вероятно, сделал это так в authenticated_system.rb

 def login_from_cookie
  user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token])
  if user && user.remember_token?
    self.current_user = user
    session[:return_to] = nil # This clears out the return value so the user will get redirected to the default path
    handle_remember_cookie! false # freshen cookie token (keeping date)
    self.current_user
  end
end

Это сеанс [: return_to] = ноль

Тогда просто убедитесь, что вы установили путь по умолчанию в контроллере сессий, и у вас все должно быть в порядке. Код в вашем контроллере сессий должен выглядеть примерно так:

redirect_back_or_default(the_path_you_want_to_send_them_to)
0 голосов
/ 20 ноября 2009

Разве вы не можете просто настроить маршруты так, чтобы

map.root :controller => :users, :action => :search

А затем есть before_filter, который проверяет, установлен ли какой-либо параметр "залогинен"? Этот параметр должен быть установлен всякий раз, когда пользователь входит в систему, либо с помощью cookie, либо с помощью обычных средств. Затем, независимо от того, происходит ли проверка подлинности с использованием cookie или происходит обычная аутентификация, он переходит на страницу по умолчанию. Может быть, я неправильно понимаю проблему.

0 голосов
/ 24 мая 2009

Я использую Борт, так что, возможно, это не часть Restful_Authentication, но в контроллере сеансов есть метод successful_login, который использует этот метод restful_auth:

redirect_back_or_default( root_path )

, что определено в authenticated_system.rb

    def redirect_back_or_default(default)
      redirect_to(session[:return_to] || default)
      session[:return_to] = nil
    end
0 голосов
/ 24 мая 2009

Вы можете добавить эту строку в контроллер сеанса после успешного входа в систему:

redirect_to :controller => 'dashboard', :action => 'index'
...