Я использую Devise в своем приложении Rails 3.0.9 для аутентификации пользователей. Поскольку я хотел иметь возможность управлять пользователями, я создал следующие пользовательские контроллеры:
class UsersController < ApplicationController
def index
@users = User.all
end
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = "Successfully created User."
redirect_to users_path
else
render :action => 'new'
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
params[:user].delete(:password) if params[:user][:password].blank?
params[:user].delete(:password_confirmation) if params[:user][:password].blank? and params[:user][:password_confirmation].blank?
if @user.update_attributes(params[:user])
if current_user.update_with_password(params[:user])
sign_in(current_user, :bypass => true)
end
flash[:notice] = "Successfully updated User."
redirect_to users_path
else
render :action => 'edit'
end
end
def destroy
@user = User.find(params[:id])
if @user.destroy
flash[:notice] = "Successfully deleted User."
redirect_to users_path
end
end
end
Это работает для показа, создания и удаления пользователей, но я столкнулся с проблемой при обновлении паролей.
Когда я обновляю пароль для текущей учетной записи, она автоматически выходит из системы.
В контроллере я попытался исправить это с помощью: (вы можете увидеть это в коде выше)
if current_user.update_with_password(params[:user])
sign_in(current_user, :bypass => true)
end
Но это дает мне эту ошибку ->
undefined method `update_with_password' for nil:NilClass
Что я действительно ищу, так это возможность обновить любой пароль учетной записи, не выходя из нее (поскольку администраторы могут изменять пароль обычных пользователей).