【问题标题】:Authenticating a User In a Separate Controller with Restful_authentication使用 Restful_authentication 在单独的控制器中对用户进行身份验证
【发布时间】:2010-12-23 00:29:27
【问题描述】:

我正在努力让用户尽快登录,因此我希望用户能够以相同的表单登录和创建记录。

是否可以通过调用会话控制器中的 create 方法从任何控制器使用 restful_authentication 插件对用户进行身份验证,并返回经过身份验证的用户?似乎这可以通过某种方式轻松完成,但我就是不知道如何在 Rails 中做到这一点。

可能是这样的:

#记录控制器 定义创建 如果参数 [:登录] && 参数 [:密码] #此方法将调用 /session/ 并传递登录名/密码参数 user = authenticate_user(params[:login'], params[:password]) 结尾 @record = Record.new(params[:record]) @record.user = 用户 如果@question.save && 用户 flash[:notice] = '记录已成功创建。' 重定向到(@record) 结尾 结尾

任何关于如何做到这一点的想法将不胜感激!

【问题讨论】:

    标签: ruby-on-rails restful-authentication


    【解决方案1】:

    我已经在 Rails 2.3.4 上测试了这段代码,它可以工作;用户保持登录状态。请记住,您应该尝试重构,以便身份验证代码位于一个位置,而不是在多个控制器中重复。

    另请注意,此 sn-p 中的身份验证代码是 Sessions 控制器中的简化版本,因此不处理任何“记住我”功能。

    # POST /stacks
    # POST /stacks.xml
    def create
      @stack = Stack.new(params[:stack])
    
      if params[:login] && params[:password]
        logout_keeping_session!
        user = User.authenticate(params[:login], params[:password])
        self.current_user = user
      end
    
      respond_to do |format|
        if !user
          flash[:error] = 'Login details incorrect.'
          format.html { render :action => "new" }
          format.xml  { render :xml => @stack.errors, :status => :unprocessable_entity }
        elsif @stack.save
          flash[:notice] = 'Stack was successfully created.'
          format.html { redirect_to(@stack) }
          format.xml  { render :xml => @stack, :status => :created, :location => @stack }
        else
          format.html { render :action => "new" }
          format.xml  { render :xml => @stack.errors, :status => :unprocessable_entity }
        end
      end
    end
    

    【讨论】:

    • Nigel Thorne (stackoverflow.com/users/23963/nigel-thorne) 建议验证失败应该真正返回 HTTP 401(未经授权)而不是 @stack 中的任何错误。他也是对的:-)
    • 或者,在非 XML 的情况下,重定向到登录页面。
    猜你喜欢
    • 2013-03-11
    • 2020-11-05
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多