У меня есть действие контроллера, которое мне нужно вызвать с помощью AJAX. Поэтому я использовал skip_before_filter
, чтобы отключить требование о том, чтобы я вошел в систему для этого конкретного вызова.Использование «skip_before_filter» в контроллере logs me out
Это работает, но по последующим запросам я перенаправляюсь в форму для входа. Как я могу избежать этого?
Вот код фильтра в контроллере:
protect_from_forgery
before_filter :logged_in?
skip_before_filter :logged_in?, :only => [:toggle_waiver]
Вот действие контроллера:
def toggle_waiver
@household = Household.find(params[:household_id])
@household.update_attributes(:waive_latefee => params[:bool])
render :nothing => true
end
Метод logged_in?
просто дом вырос один:
def self.authenticate(username, password)
user = find_by_username(username)
if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
user
else
nil
end
end
Есть лучший способ сделать это? (Я использую Rails 3 ... не судите меня) :-)
Вот метод logged_in?
контроллера (от application_controller
):
protected
def logged_in?
unless session[:admin_id]
flash[:notice] = "Please log in."
redirect_to log_in_path
return false
else
return true
end
end
И session
устанавливаются с помощью этого метода в контроллер сеансов:
def create
admin = Admin.authenticate(params[:username], params[:password])
if admin
session[:admin_id] = admin.id
redirect_to root_url, :notice => "Logged in!"
else
flash.now.alert = "Invalid email or password"
render "new"
end
end
Не могли бы вы отправить свой метод 'logged_in?'? – spickermann