Принудительно ли использовать Restful Authentication для входа в систему под определенным пользователем (функция администратора)? - PullRequest
1 голос
/ 06 декабря 2009

Я использую Restful Authentication, и я хотел бы иметь возможность войти в систему от имени разных пользователей на нашем сайте, чтобы исследовать проблемы, которые у них могут возникнуть («посмотрите, что они видят»). Поскольку все пароли зашифрованы, я, очевидно, не могу просто использовать их пароли.

Итак, как я могу заставить сеанс войти в систему как определенный пользователь?

Ответы [ 2 ]

3 голосов
/ 06 декабря 2009
  • В вашем sessions_controller добавить действие impersonate, например:

    def impersonate
      user = User.find(params[:id])
      logout_killing_session!
      self.current_user = user
      flash[:notice] = t(:logged_in)
      redirect_to root_url
    end
    
  • Тогда в ваших маршрутах расширяйте ресурс сеанса с участником impersonate:

    map.resource :session, :member => {:impersonate => :post}
    
  • Наконец, где-то в ваших представлениях администратора добавьте кнопку для каждого пользователя с именем «Олицетворение». Это должно выглядеть примерно так (при условии, что пользователь находится в локальной переменной user):

    <%= button_to "Impersonate", impersonate_session_path(:id => user.id) %>
    

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

P.S. Не забудьте потребовать администратора для действия impersonate в контроллере сессий.

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

Просто переопределите session[:user_id] с идентификатором пользователя, которым вы хотите быть. Один простой способ - сделать так, чтобы пользователь вошел в систему как администратор, а затем дал им выпадающий список имен пользователей. Когда они отправляют форму, установите контроллер на session[:user_id], а затем перезагрузите current_user. Администратор «станет» этим пользователем.

...