2017-02-07 3 views
1

Когда пользователь создает пароль update действие ударяется.Devise sign_in (: user, @user) 401 Ошибка

module Users 
    class PasswordController < ApplicationController 
    skip_before_action :authenticate_user! 
    before_action :set_user 

    def setup 
     render file: "#{Rails.root}/public/404" unless @user&.sign_in_count&.zero? 
    end 

    def update 
     if @user.update_attributes(password_params) 
     sign_in(:user, @user) 
     redirect_to root_path, notice: 'Setup complete' 
     else 
     flash[:alert] = errors(@user) 
     render :setup 
     end 
    end 

    private 

    def password_params 
     params.require(:user).permit(:password, :password_confirmation) 
    end 

    def set_user 
     @user = User.find_by(confirmation_token: params[:token]) 
    end 
    end 
end 

При наступлении удара update.

Это то, что консоль показывает

Started PATCH "https://stackoverflow.com/users/password/wynEjv-E7uFp44EcwjbS" for ::1 at 2017-02-07 12:33:01 +1000 
Processing by Users::PasswordController#update as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"vIyPtidsM1GDNLh3n7gDDB2HzvR0QEEwAAvfMybNRn0/t4em4StiUVDyKwLC9i1OThoYguEae4T+xqLttjt1Pw==", "email"=>"[email protected]", "user"=>{"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Continue", "token"=>"wynEjv-E7uFp44EcwjbS"} 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = $1 LIMIT $2 [["confirmation_token", "wynEjv-E7uFp44EcwjbS"], ["LIMIT", 1]] 
    (0.1ms) BEGIN 
    SQL (0.5ms) UPDATE "users" SET "encrypted_password" = $1, "updated_at" = $2 WHERE "users"."id" = $3 [["encrypted_password", "$2a$11$o5wmmxnCv.rlPha52GR0IOG4tbhEJYNNF9tctcSLDMS/dvLAU0hXq"], ["updated_at", 2017-02-07 02:33:01 UTC], ["id", 9]] 
    (1.0ms) COMMIT 
    User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 9], ["LIMIT", 1]] 
    (0.1ms) BEGIN 
    (0.2ms) COMMIT 
Completed 401 Unauthorized in 129ms (ActiveRecord: 2.5ms) 

Кто-нибудь знает, почему метод sign_in не работает здесь?

Я использовал его в нескольких приложениях, и тогда он работал.

Благодарим за любую помощь заранее.

+1

Не беспокойтесь, ребята, все это исправлено. Сначала необходимо подтвердить подтверждение использования устройства. – joeyk16

ответ

1

Вы можете использовать его как это

@user.update_with_password(password_params) 
sign_in @user, :bypass => true 

Надеется, что это будет работать для вас, как это работает для меня!

+0

Привет, да, я пробовал, чтобы он не работал. Вероятно, это сработало для вас, потому что ваш пользователь сначала подтвердил. – joeyk16

+0

Вы хотите также подтвердить свой пароль с обновлением пароля? –

+0

Да, я просто сделал @ user.confirm в действии обновления. Теперь работает. – joeyk16