Rails сессия — изменения current_user

#ruby-on-rails #session

#ruby-on-rails #сессия

Вопрос:

У меня есть переменная current_user, установленная для вошедшего в систему пользователя, она должна быть статичной на время сеанса, но когда я показываю одного из других пользователей, я, кажется, «становлюсь» этим пользователем со всеми его разрешениями (или их отсутствием)

в моем пользовательском контроллере:

 def show
  @user = User.find(params[:id])

 respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @user }
end
end
  

в моем помощнике по сеансам:

   def current_user?(user)
    @current_user = user
  end

 def current_user
   @current_user ||= user_from_remember_token
 end
  

В моей боковой панели

 <%= link_to current_user.username, :controller => 'users', :action => 'show', :id => current_user.id %></br>
  

Это отражает изменение пользователя (как и новое отсутствие дополнительных ссылок «admin»)

Чего я не понимаю?

Ответ №1:

current_user? Метод неверен. Он устанавливает current_user значение user вместо того, чтобы возвращать, current_user совпадает ли оно с user .

Если вы измените его на следующее, все, вероятно, будет работать так, как ожидалось:

 def current_user?(user)
  @current_user == user
end
  

Комментарии:

1. Милый Мозес, вы, ребята, все быстрые — и хорошие! Это сделало свое дело! Спасибо, Миша! Вы избавили мой лоб и стол от лишних хлопот….

2. Такую простую ошибку можно совершить. Хорошее обнаружение!

Ответ №2:

Возможно, ваша система аутентификации хранит текущего пользователя в обоих @current_user и @user — поэтому в вашем show действии вы случайно устанавливаете текущего пользователя на пользователя, которого пытаетесь показать.

Попробуйте вместо этого @user_to_show в своем show действии и посмотрите, исправит ли это.