0

ユーザーができるだけ早くログインできるようにしようとしているので、ユーザーが同じフォームでログインしてレコードを作成できるようにしたいと思います。

なんらかの方法でセッションコントローラーのcreateメソッドを呼び出して、任意のコントローラーからrestful_authenticationプラグインを使用してユーザーを認証し、認証されたユーザーを返すことは可能ですか?これはどういうわけか簡単にできるようですが、Railsでそれを行う方法がわかりません。

多分次のようなものです:

#Recordsコントローラー

def create
    if params [:login] && params [:password]
        #このメソッドは/ session /を呼び出し、login /passwordparamsを渡します
        user = authenticate_user(params [:login']、params [:password])
    終わり

    @record = Record.new(params [:record])
    @record.user=ユーザー

    @question.save&&ユーザーの場合
        flash [:notice]='レコードは正常に作成されました。'
        redirect_to(@record)
    終わり
終わり

これを行う方法についてのアイデアをいただければ幸いです。

4

1 に答える 1

0

このコードを Rails 2.3.4 でテストしたところ、動作しました。ユーザーはログインしたままです。認証コードが複数のコントローラーに複製されるのではなく、1 つの場所に存在するようにリファクタリングを試みる必要があることに注意してください。

また、このスニペットの認証コードは、Sessions コントローラーの認証コードを簡略化したものであるため、「remember me」機能は処理されません。

# 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 に答える