2012-04-12 7 views
1

Мне было интересно, почему пользователь продолжает подписываться после редактирования своего профиля? моя функция обновлениярельсы, пользователь выйдет после редактирования профиля?

def update 
    flash[:notice] = "what is params[id]", params[:id] 
    @user = User.find(params[:id]) 
    if @user.update_attributes(params[:user]) 
     #flash[:success] = "Profile updated" 
     sign_in @user 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

params id становится прошло правильно, и все обновления правильно на моем дб. моя форма в users/edit.html.erb является

<% provide(:title, "Edit user") %> 
<h1>Update your profile</h1> 

<div class="row"> 
    <div class="span6 offset3"> 

     <%= form_for @user, :html => {:multipart => true} do |f| %> 
     <%= render 'fields', object: f.object, f: f %> 

     <%= f.submit "Save changes", :class => "btn btn-large btn-primary", :style =>"display:block;" %> 

     <%= image_tag(@user.image_url(:thumb), :class => "image_avatar") if @user.image? %> 

     <%= f.file_field :image, :class=>"upload_button" %> 
     <% end %> 

    </div> 
</div> 

Я использую devise gem, но редактировать не использует DEViSE маршрут (я использую разработать для регистрации). может ли это повлиять на это?

ответ

1

Да, у метода есть метод sign_in.

Однако после редактирования профиля их нельзя оставлять без доступа.

+0

О, черт возьми, спасибо за сайт rubydoc! я никогда не знал об этом! hmmm по какой-то причине, даже после добавления в sign_in @user, мои пользователи по-прежнему выходят из системы. вы могли бы подумать о каких-либо причинах, почему это может быть? – Sasha

+0

Является ли вышеуказанный код контроллера завершенным? Что передано как params [: user] (показать вашу форму)? – DanS

+0

Я редактировал вопрос, а не вставлял все в комментарии – Sasha

2

Я столкнулся с этой странной проблемой, и в моем случае это произошло из-за того, что пароль был восстановлен, когда пользователь был сохранен. Это произошло, хотя поле пароля не было в форме профиля. Сброс выполнялся через обратный вызов ActiveRecord, который назначал пользователям с аутентификацией facebook случайный пароль. Я исправил это, убедившись, что я никогда не назначаю случайный пароль пользователям, у которых уже есть набор encrypted_password.

Devise хранит пользователей в сеансе через драгоценный камень, и что хранится, выглядит как [[user_id], encrypted_password] (в сеансе ['warden.user.user.key']). Когда пароль был изменен, поиск пользователей в сеансе завершился неудачно - поскольку зашифрованный пароль больше не сопоставляется - и, следовательно, пользователь будет выведен из системы.