Rails:在注册后记录用户

时间:2012-05-30 03:09:36

标签: ruby-on-rails ruby-on-rails-3 authentication ruby-on-rails-3.1

我想知道注册后立即登录用户有什么好办法。我不需要电子邮件确认,因此用户不应该期望这种情况自动发生。

  def create
    @user = User.new(params[:user])

    respond_to do |format|
      if @user.save
        format.html { redirect_to welcome_url, notice: "Your user: #{@user.name} was successfully created! Please log in!" }
        format.json { render json: @user, status: :created, location: @user }
      else
        format.html { render action: "new" }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

我看到的一个问题是我没有直接连接到POST会话#create的路径。它看起来像我应该但没有特定的路线

controller :sessions do
   get    'login'  => :new
   post   'login'  => :create
   delete 'logout' => :destroy
   get 'logout' => :destroy
end

的产率:

login GET    /login(.:format)                        sessions#new
      POST   /login(.:format)                        sessions#create
logout DELETE /logout(.:format)                       sessions#destroy
       GET    /logout(.:format)                       sessions#destroy

为了便于参考,这是我的会话#create方法

def create
  user = User.find_by_name(params[:name])
  if user and user.authenticate(params[:password])
    session[:user_id] = user.id

    if session[:return_to]
      redirect_to session[:return_to]
      session[:return_to] = nil
      return
    end
    redirect_to eval("#{user.role}_url")

  else
    redirect_to login_url, alert: "Invalid user/password combination"
  end
end

我可以直接挂接到我的session #create route from my user @ create controller方法,就像用户第一次登录一样吗?

1 个答案:

答案 0 :(得分:1)

您无法使用post方法重定向。见redirect_to using POST in rails。所以你的选择是: 1.访问会话模型并从用户创建方法创建记录,或 2.(不推荐)创建对会话#loging方法的GET访问。 我希望这会有所帮助。