使用会话编辑配置文件时设计错误

时间:2013-01-25 02:40:00

标签: ruby-on-rails ruby web-applications devise

我正在开发一个应用程序,该应用程序有几个区域需要用户登录才能访问。 (我正在使用设计逻辑)。

我目前正在我的应用程序控制器中使用以下内容来记住目标网址(有人点击的链接(需要身份验证)),以便在验证后将用户带到那里(根据How to direct user to a specific page after logging in with Devise and Rails)。

class ApplicationController < ActionController::Base
  helper :content
  protect_from_forgery


  def after_sign_in_path_for(user)
    origin_path = session[:origin_path]
    default_redirect_path ="/"
    clear_origin_path
    if origin_path.present?
      origin_path
    else
      params[:target].presence || default_redirect_path
    end
  end

  private

  def authenticate_user!
    store_origin_path
    super
  end

    def store_session
    store_origin_path

  end

  def store_origin_path
    session[:origin_path] = request.fullpath
  end

  def clear_origin_path
    session[:origin_path] = nil
  end


end

这一切都很好,但我刚刚注意到,当我尝试访问“/ users / edit”时,我现在收到错误:

ArgumentError in Devise::RegistrationsController#edit

wrong number of arguments (1 for 0)
Rails.root: /home/james/*******

Application Trace | Framework Trace | Full Trace
app/controllers/application_controller.rb:19:in `authenticate_user!'
Request

Parameters:

None
Show session dump

_csrf_token: "XmrTSQOQ3Z0XTSn14LAX8LtMNVOwM4q3bQ+UhxjvgGM="
session_id: "2caaccc944774f2a7ac6f440c2f442d9"
user_return_to: "/my_tendersave"
warden.user.user.key: ["User", [1], "$2a$10$foTK/Em72/E0rILIuUv7su"]
warden.user.user.session: {"last_request_at"=>2013-01-25 01:48:43 UTC}
Show env dump

GATEWAY_INTERFACE: "CGI/1.2"
HTTP_ACCEPT: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
HTTP_ACCEPT_CHARSET: "ISO-8859-1,utf-8;q=0.7,*;q=0.3"
HTTP_ACCEPT_ENCODING: "gzip,deflate,sdch"
HTTP_ACCEPT_LANGUAGE: "en-GB,en-US;q=0.8,en;q=0.6"
REMOTE_ADDR: "127.0.0.1"
SERVER_NAME: "localhost"
SERVER_PROTOCOL: "HTTP/1.1"
Response

Headers:

None

我该怎么做才能确保这项工作?

我是否需要更改应用程序控制器?

或覆盖其他一些设计方法。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我只是在应用程序控制器中重命名该方法并调用了正确的超类方法。

  def authenticated_user!
    store_origin_path
    authenticate_user!
  end