По умолчанию все контроллеры rails наследуют контроллер приложения.Сессии и подклассы ActionController
В моем приложении я хочу, чтобы пользователи могли проходить аутентификацию с любой страницы, используя http-basic auth, а также аутентифицироваться путем публикации, но только для одного контроллера.
В настоящее время все выглядит так (упрощенно):
class ApplicationController < ActionController::Base
before_filter :set_current_user
private
def set_current_user
Authorization.current_user = current_user
end
def current_user
if session[:user].blank?
authenticate_or_request_with_http_basic do |user,pass|
session[:user] = authenticated_user_or_nil
end
end
session[:user]
end
end
class UserSessionsController < ApplicationController
prepend_before_filter :set_user_from_params
private
def set_user_from_params
session[:user] = authenticated_user_or_nil
end
end
я поставил точку останова в обоих set_user_from_params
и set_current_user
и проверили они действительно называют в правильном порядке.
set_user_from_params
действительно устанавливает session[:user]
правильно, но когда я продолжаю и ударяю точку останова внутри set_current_user
, сессия hash пуста !?
Является ли это предполагаемым поведением или я пропустил что-то действительно очевидное?
Отличный ответ, спасибо! В моем случае auth происходит из приложения, которое еще не имеет сеанса или токена. Для кого-то еще с этим я просто добавил 'skip_before_filter: verify_authenticity_token,: only =>: create' к рассматриваемому контроллеру. – arrtchiu