Wednesday, 16 October 2019

Mobile Rails API with Devise

Mobile Rails API with Devise

https://jee-appy.blogspot.in/2016/03/how-to-make-rest-api-in-rails.html

1. rails g migration AddAuthenticationtokenToUsers authentication_token:string

2. rails generate controller Api/V1/Api

3. create a user model (User.rb)

       class User < ApplicationRecord
         devise :database_authenticatable, :registerable,
               :recoverable, :rememberable, :validatable

        before_save :ensure_authentication_token
       
           def ensure_authentication_token
          if authentication_token.blank?
            self.authentication_token = generate_authentication_token
          end
        end

        private
        def generate_authentication_token
            loop do
              token = Devise.friendly_token
              break token unless User.find_by(authentication_token: token)
            end
        end

      end

4. ApiController

      class Api::V1::ApiController < ApplicationController
        def create
       
        end

        def destroy
       
        end

        respond_to :json
        helper_method :current_user
        def getting_started
        end

        def current_user
          @current_user ||= User.where(authentication_token:  
                request.headers['User-Token']).first
        end

        def authenticate_user!
          return render json:{error:'401 Unauthorized!'},status: 401 unless 
            current_user
        end

      end

5. ApplicationController

     class ApplicationController < ActionController::Base
        before_action :configure_permitted_parameters, if: :devise_controller?

        protected

        def configure_permitted_parameters
            devise_parameter_sanitizer.permit(:sign_up) do |user|
            user.permit(:email, :password,:password_confirmation, :remember_me)
          end
            devise_parameter_sanitizer.permit(:sign_in) do |user|
            user.permit(:email, :password)
          end
            devise_parameter_sanitizer.permit(:account_update) do |user|
            user.permit(:email, :password,:password_confirmation, 
              :current_password)
          end
        end

    end

6. routes.rb

       namespace :api do
        namespace :v1 do
          devise_scope :user do
            post "/sign_in", :to => 'sessions#create'
            post "/sign_up", :to => 'registrations#create'
            get "/sign_up", :to => 'registrations#create'
            put '/change_password', to: 'registrations#change_password'
            get "/profile", :to => 'registrations#profile'
            post "/update_account", :to => 'registrations#update'
            # delete "/sign_out", :to => 'sessions#destroy'
            # get "/reset_password", :to => 'registrations#reset_password'
            # get "/reset_password_link", :to => 'registrations#reset_password_link'
          end
        end
      end

Flow of registration controller :=>
Sign Up

1. routes.rb
       post "/sign_up", :to => 'registrations#create'
       get "/users", :to => 'registrations#index'

2. registrations_controller.rb

class Api::V1::RegistrationsController < Api::V1::ApiController
 
   /*--------------------------------------  Create   -------------------------------------------------*/
        def new
          user = User.new
        end

        def create
          user = User.new(registration_params)
           if user.save
              return render json: {status: 200, data: {user: user}, :message
                 =>"Successfuly Signup"}
          else
             warden.custom_failure!
             return render json: {status: 401, data: {user: nil, errors: 
                user.errors}, :message =>"SignUp Rollback"}
          end
       end
  /*--------------------------------------  Index   -------------------------------------------------*/
       def index
         user = User.all
        if user.present?
          return render json: {status: 200, data: {user: user}, :message =>"All
             Users"}
        else
          return render json: {status: 401, data: {user: nil, errors: user.errors},
             :message =>" Rollback"}
        end
      end
  /*--------------------------------------  Update   -------------------------------------------------*/
     first select which user update so please select user token 
        def update
           user =  current_user
            if params[:user][:email].present?
              user.email = params[:user][:email]
            end
            if params[:user][:password].present?
             user.password = params[:user][:password]
            end
           if user.save
              return render json: {status: 200, data: {user: user}, :message
                   =>"User Profile Successfully Updated"}
          end
       end  
/*--------------------------------------  Destroy   -------------------------------------------------*/
     def destroy
       
     end

end

3. sessions_controller.rb

    class Api::V1::SessionsController < Api::V1::ApiController
       
            def create
              email = params[:user][:email]
              password = params[:user][:password]
             @user = User.where(email: email).first
                 return render json: {status: 200, data: {user: @user}, message:  
                    "Login Successful"}
           end

           def destroy
           end








    end
 

      




No comments:

Post a Comment

  Common Git Commands   Take clone of a repository git clone <remote-repository-url> ex: git clone  https://github.com/agricor/RegTech...