Ruby on Rails
Autentisera Api med Devise
Sök…
Introduktion
Devise är autentiseringslösning för Rails. Innan jag går längre vill jag lägga till en snabb anteckning om API. Så API hanterar inte sessioner (är statslös) vilket betyder ett som ger svar efter att du begär, och sedan kräver ingen ytterligare uppmärksamhet, vilket innebär att inget tidigare eller framtida tillstånd krävs för att systemet ska fungera därmed när vi begär att servern behöver skicka autentiseringsinformation med alla API och ska säga Devise att inte lagra autentiseringsinformation.
Komma igång
Så först skapar vi rälsprojekt och installationsenheter
skapa en rails-applikation
rails new devise_example
lägg nu till att tänka på pärellistan
Du kan hitta en fil med namnet 'Gemfile' i roten av rails-projektet
bundle install
Därefter måste du köra generatoren:
rails generate devise:install
Nu på konsolen kan du hitta några instruktioner bara följ den.
Generera utforma modellen
rails generate devise MODEL
Kör sedan rake db:migrate
För mer information, gå till: Devise Gem
Autentiseringstoken
Autentiserings-token används för att autentisera en användare med ett unikt token, så Innan vi fortsätter med logiken måste vi först lägga till auth_token
till en Devise-modell
Därav,
rails g migration add_authentication_token_to_users
class AddAuthenticationTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :auth_token, :string, default: ""
add_index :users, :auth_token, unique: true
end
end
Kör sedan rake db:migrate
Nu är vi alla inställda på att göra autentisering med hjälp av auth_token
I app/controllers/application_controllers.rb
Först den här raden till den
respond_to :html, :json
detta kommer att hjälpa rails applikation att svara med både html och json
Sedan
protect_from_forgery with: :null
kommer att ändra detta :null
eftersom vi inte har att göra med sessioner.
nu lägger vi till autentiseringsmetod i application_controller
Så som standard använder Devise e-post som unikt fält, vi kan också använda anpassade fält, för det här fallet kommer vi att autentisera med user_email och autor_token.
before_filter do
user_email = params[:user_email].presence
user = user_email && User.find_by_email(user_email)
if user && Devise.secure_compare(user.authentication_token, params[:auth_token])
sign_in user, store: false
end
end
Obs: Ovanstående kod är enbart baserad på din logik, jag försöker bara förklara det fungerande exemplet
På rad 6 i koden ovan kan du se att jag har ställt in store: false
vilket kommer att förhindra att skapa en session på varje begäran och därmed uppnådde vi statslösa re