Ruby on Rails
Verifieer Api met Devise
Zoeken…
Invoering
Devise is een authenticatie-oplossing voor Rails. Voordat ik verder ga, wil ik een snelle opmerking over API toevoegen. Dus API behandelt geen sessies (is stateless), wat betekent dat er een antwoord wordt gegeven nadat u een verzoek indient, en vereist vervolgens geen verdere aandacht, wat betekent dat er geen vorige of toekomstige status vereist is voor het systeem. Daarom moeten we telkens wanneer we de server vragen verificatiegegevens doorgeven met alle API en moet Devise vertellen om geen verificatiegegevens op te slaan.
Ermee beginnen
Dus eerst zullen we rails project en setup-apparaat maken
maak een rails-applicatie
rails new devise_example
voeg nu bedenken toe aan edelstenenlijst
je kunt een bestand met de naam 'Gemfile' vinden in het root of rails-project
Voer vervolgens bundle install
Vervolgens moet u de generator uitvoeren:
rails generate devise:install
Nu op de console kunt u enkele instructies vinden, volg het gewoon.
Genereer bedenk model
rails generate devise MODEL
Voer vervolgens rake db:migrate
Ga voor meer informatie naar: Devise Gem
Verificatietoken
Verificatietoken wordt gebruikt om een gebruiker te authenticeren met een uniek token, dus voordat we doorgaan met de logica, moeten we het veld auth_token
toevoegen aan een Devise-model
Vandaar,
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
Voer vervolgens rake db:migrate
Nu zijn we helemaal klaar om authenticatie te doen met behulp van auth_token
In app/controllers/application_controllers.rb
Eerst deze regel er naar toe
respond_to :html, :json
dit zal rails-toepassingen helpen reageren met zowel html als json
Vervolgens
protect_from_forgery with: :null
zal dit veranderen :null
omdat we niet te maken hebben met sessies.
nu voegen we de authenticatiemethode toe in application_controller
Dus standaard gebruikt Devise e-mail als uniek veld, we kunnen ook aangepaste velden gebruiken, in dit geval zullen we authenticeren met user_email en auth_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
Opmerking: Bovenstaande code is puur gebaseerd op uw logica, ik probeer alleen het werkvoorbeeld uit te leggen
Op regel 6 in de bovenstaande code kun je zien dat ik store: false
heb ingesteld store: false
wat zal voorkomen dat er een sessie op elke aanvraag wordt gemaakt, dus hebben we stateless re bereikt