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

私が見ている 1 つの問題は、POST session#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

参考までに、ここに私のセッション#作成メソッドがあります

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

初めての場合を除いて、ユーザーがサインインしているかのように、user@create コントローラー メソッドから session#create ルートに直接フックできますか??

4

1 に答える 1

1

post メソッドでリダイレクトすることはできません。rails で POST を使用する redirect_to を参照してください。1. セッション モデルにアクセスし、users create メソッドからそこにレコードを作成するか、または 2. (非推奨) sessions#login メソッドへの GET アクセスを作成します。これが役立つことを願っています。

于 2012-05-30T03:38:20.660 に答える