Ruby on Rails
Autenticate Api usando Devise
Ricerca…
introduzione
Devise è la soluzione di autenticazione per Rails. Prima di proseguire, vorrei aggiungere una breve nota sull'API. Quindi API non gestisce le sessioni (è stateless), ovvero una che fornisce una risposta dopo la richiesta, e quindi non richiede ulteriore attenzione, il che significa che non è richiesto alcun stato precedente o futuro affinché il sistema funzioni, quindi ogni volta che si richiede al server di passare i dettagli di autenticazione con tutte le API e indicare a Devise di non memorizzare i dettagli di autenticazione.
Iniziare
Quindi prima creeremo il progetto di rotaie e il dispositivo di installazione
creare un'applicazione per rotaie
rails new devise_example
ora aggiungi inventare alla lista delle gemme
puoi trovare un file chiamato 'Gemfile' nella radice del progetto rails
Quindi eseguire l' bundle install
Successivamente, è necessario eseguire il generatore:
rails generate devise:install
Ora su console puoi trovare poche istruzioni seguirlo.
Genera il modello di sviluppo
rails generate devise MODEL
Quindi esegui rake db:migrate
Per maggiori dettagli vai su: Devise Gem
Token di autenticazione
Il token di autenticazione viene utilizzato per autenticare un utente con un token univoco, quindi prima di procedere con la logica prima è necessario aggiungere il campo auth_token
a un modello di auth_token
Quindi,
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
Quindi esegui rake db:migrate
Ora siamo tutti pronti per fare l'autenticazione usando auth_token
In app/controllers/application_controllers.rb
Prima questa linea ad esso
respond_to :html, :json
questo aiuterà l'applicazione rails a rispondere sia con html che json
Poi
protect_from_forgery with: :null
cambierà questo :null
dato che non abbiamo a che fare con le sessioni.
ora aggiungeremo il metodo di autenticazione in application_controller
Quindi, per impostazione predefinita, Devise utilizza l'e-mail come campo univoco che può anche utilizzare campi personalizzati, in questo caso verificheremo utilizzando user_email e 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
Nota: il codice sopra riportato si basa esclusivamente sulla tua logica, sto solo cercando di spiegare l'esempio di lavoro
Alla riga 6 del codice precedente puoi vedere che ho impostato store: false
che impedirà di creare una sessione su ogni richiesta, quindi abbiamo ottenuto lo stateless