Search code examples
ruby-on-railsruby-on-rails-3ruby-on-rails-4ruby-on-rails-3.2ruby-on-rails-3.1

Devise ..After first login should ask for change password


I am using devise as authentication in my application.

I need to implement feature in devise. After first login user should ask to change password.

I tried through model

 after_create :update_pass_change

    def update_pass_change
     self.pass_change = true
     self.save
    end 

Solution

  • Checking current_user.sign_in_count is way to judge first login.

    You'll do something like this.

    class ApplicationController < ActionController::Base
      def after_sign_in_path_for(resource)
        if current_user.sign_in_count == 1
          edit_passwords_path
        else
          root_path
        end
      end
    end
    

    You need Implement edit/update password action.

    class PasswordsController < ApplicationController
      def edit
      end
    
      def update
        if current_user.update_with_password(user_params)
          flash[:notice] = 'password update succeed..'
          render :edit
        else
          flash[:error] = 'password update failed.'
          render :edit
        end
      end
    
      private
        def user_params
          params.require(:user).permit(:current_password, :password, :password_confirmation)
        end
    end
    

    config/routes.rb

    resource :passwords
    

    app/views/passwords/_form.html.erb

    <%= form_for current_user, url: passwords_path do |f| %>
      current_password:<br />
      <%= f.password_field :current_password %><br />
      password:<br />
      <%= f.password_field :password %><br />
      password_confirmation:<br />
      <%= f.password_field :password_confirmation %><br />
      <br />
      <%= f.submit %>
    <% end %>