2015-04-03 18 views
1

Итак, я знаю, что примерно половина миллиона вопросов об обходе требований пароля для редактирования пользователя, если они прошли проверку подлинности через Facebook. Я обещаю, что прочитал, по крайней мере, 75% из них и до сих пор не могу понять это.Devise Редактировать пользователя не экономить

В принципе, я следил за Carl Edward & Laurie Laine's SO answer here, чтобы создать контроллер регистрации для Devise, который позволит мне обойти проверку пароля, если пользователь редактирует свою учетную запись, а пользователь зарегистрирован в Facebook. Со следующим кодом он, наконец, не выдает ошибку, но ни один из моих обновленных атрибутов не сохраняется.

class RegistrationsController < Devise::RegistrationsController 

    def update_resource(resource, params) 
    if current_user.provider == "facebook" 
     params.delete("current_password") 
     resource.update_without_password(params) 
    else 
     resource.update_with_password(params) 
    end 
    end 

    def update 
    account_update_params = devise_parameter_sanitizer.sanitize(:account_update) 


    # required for settings form to submit when password is left blank 
    if account_update_params[:password].blank? 
     account_update_params.delete("password") 
     account_update_params.delete("password_confirmation") 
    end 

    @user = User.find(current_user.id) 
    if @user.update_attributes(account_update_params) 
     @user.update(account_update_params) 
     set_flash_message :notice, :updated 
     update_resource(@user,account_update_params) 
     # Sign in the user bypassing validation in case their password changed 
     sign_in @user, :bypass => true 
     redirect_to after_update_path_for(@user) 
    else 
     render "edit" 
    end 
    end 
end 

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

+0

Почему вы называете @ user.update (account_update_params) после @ user.update_attributes (account_update_params)? update_attributes() - это просто псевдоним для update(). –

+0

Я добавил, что это не спасет, и я подумал, что это может заставить его сохранить обновленные атрибуты. Я возьму его. Благодаря! Любая идея, почему это не спасает? – ChiefRockaChris

+0

Что вы видите в журнале при сохранении пользователя? –

ответ

1

Выяснено, что, несмотря на то, что необходимые атрибуты были в девайсере параметров Devise, я неправильно назвал параметры account_update: update.

ДО (не работает):

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit({ roles: [] }, :name,:email, :password, :password_confirmation) } 
     devise_parameter_sanitizer.for(:update) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation, :avatar,:current_password, :about,:user, :name) } 
    end 
end 

ПОСЛЕ (рабочий):

def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit({ roles: [] }, :name,:email, :password, :password_confirmation) } 
     devise_parameter_sanitizer.for(:account_update) { |u| u.permit({ roles: [] }, :email, :password, :password_confirmation, :avatar,:current_password, :about,:user, :name) } 
    end 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^