Аутентификация пользователя в отдельном контроллере с Restful_authentication - PullRequest
0 голосов
/ 04 декабря 2009

Я пытаюсь сделать так, чтобы пользователи могли входить в систему как можно быстрее, поэтому я хочу, чтобы пользователи могли входить в систему и создавать записи в одной форме.

Можно ли аутентифицировать пользователя с помощью плагина restful_authentication с любого контроллера, каким-либо образом вызывая метод create в контроллере сеанса, и возвращать аутентифицированного пользователя? Кажется, что это можно как-то легко сделать, но я просто не могу понять, как это сделать в 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

Буду признателен за любые идеи о том, как это сделать!

1 Ответ

0 голосов
/ 07 декабря 2009

Я тестировал этот код на 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
...