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



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow