0

我试图让用户尽可能快地登录,所以我希望用户能够登录并以相同的形式创建记录。

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

也许是这样的:

#记录控制器

定义创建
    如果参数 [:登录] && 参数 [:密码]
        #此方法将调用 /session/ 并传递登录名/密码参数
        user = authenticate_user(params[:login'], params[:password])
    结尾

    @record = Record.new(params[:record])
    @record.user = 用户

    如果@question.save && 用户
        flash[:notice] = '记录已成功创建。'
        重定向到(@record)
    结尾
结尾

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

4

1 回答 1

0

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

另请注意,此代码段中的身份验证代码是 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
于 2009-12-06T22:28:25.810 回答