Ruby on Rails
Uwierzytelnij interfejs API za pomocą Devise
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