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



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow