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
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
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
end
def authenticate_user!
return render json:{error:'401 Unauthorized!'},status: 401 unless
current_user
end
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,
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
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 :=>
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
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