Szukaj…


Wprowadzenie

Devise to rozwiązanie uwierzytelniające dla Railsów. Przed pójściem dalej chciałbym dodać szybką notatkę na temat API. Interfejs API nie obsługuje sesji (jest bezstanowy), co oznacza taką, która zapewnia odpowiedź po zgłoszeniu żądania, a następnie nie wymaga dalszej uwagi, co oznacza, że nie jest wymagany żaden poprzedni ani przyszły stan, aby system działał odtąd za każdym razem, gdy wysyłamy żądanie do serwera przekazywać szczegóły uwierzytelnienia ze wszystkimi interfejsami API i powinny informować Devise, aby nie przechowywał szczegółów uwierzytelniania.

Pierwsze kroki

Najpierw stworzymy projekt szyn i urządzenie konfiguracyjne

utwórz aplikację szynową

rails new devise_example

teraz dodaj urządzenie do listy klejnotów

plik o nazwie „Gemfile” można znaleźć w katalogu głównym projektu rails

Następnie uruchom bundle install

Następnie musisz uruchomić generator:

rails generate devise:install

Teraz na konsoli możesz znaleźć kilka instrukcji, po prostu postępuj zgodnie z nimi.

Wygeneruj wymyśl model

rails generate devise MODEL

Następnie uruchom rake db:migrate

Aby uzyskać więcej informacji, przejdź do: Devise Gem


Token uwierzytelnienia

Token uwierzytelnienia służy do uwierzytelnienia użytkownika za pomocą unikalnego tokena, więc zanim przejdziemy do logiki, musimy dodać pole auth_token do modelu Devise

W związku z tym,

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

Następnie uruchom rake db:migrate

Teraz wszyscy jesteśmy skonfigurowani do przeprowadzania uwierzytelniania przy użyciu auth_token

W app/controllers/application_controllers.rb

Najpierw do tego wiersza

respond_to :html, :json 

Pomoże to aplikacji szynowej odpowiedzieć zarówno na HTML jak i JSON

Następnie

protect_from_forgery with: :null

zmieni to :null ponieważ nie mamy do czynienia z sesjami.

teraz dodamy metodę uwierzytelnienia w application_controller

Tak więc domyślnie Devise używa adresu e-mail jako unikalnego pola, możemy również użyć pól niestandardowych, w tym przypadku będziemy uwierzytelniać się przy użyciu user_email i 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

Uwaga: powyższy kod opiera się wyłącznie na twojej logice. Próbuję wyjaśnić działający przykład

W wierszu 6 powyższego kodu widać, że ustawiłem store: false co uniemożliwi utworzenie sesji dla każdego żądania, dlatego osiągnęliśmy bezpaństwow



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow