我试图让用户尽可能快地登录,所以我希望用户能够以相同的形式登录和创建记录。
是否可以通过以某种方式在会话控制器中调用create方法,从任何控制器使用restful_authentication插件对用户进行身份验证,并返回经过身份验证的用户?似乎这可以通过某种方式轻松完成,但我无法弄清楚如何在Rails中完成它。
可能是这样的:
#Records Controller def create if params[:login] && params[:password] #This method would call /session/ and pass the login/password params user = authenticate_user(params[:login'], params[:password]) end @record = Record.new(params[:record]) @record.user = user if @question.save && user flash[:notice] = 'Record was successfully created.' redirect_to(@record) end end
任何关于如何做到这一点的想法将不胜感激!
答案 0 :(得分: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