Schienen. Omniauth mit devise (Github-Beispiel)

Was wir erreichen wollen

Erstellen Sie eine einfache App mit Auth-Handhabung durch einen Drittanbieter, in unserem Fall wird es github sein.

Was ist Omniauth?

OmniAuth ist eine Bibliothek, die die Multi-Provider-Authentifizierung für Webanwendungen standardisiert. Es enthält auch Spezifikationen für die Weitergabe von Daten an/von Anbietern.

Lasst uns beginnen!

Zuerst erstellen wir eine Schienen-App

rails new git_omni

hinzufügen gem 'devise' zu deinem Gemfile und installieren Sie es

bundle install
rails g devise:install

Danach müssen wir ein Benutzermodell erstellen

rails g devise user
bundle exec rake db:migrate

Ok, wir sind mit devise fertig, lass uns zu Omniauth springen.

Wie es funktioniert?

Es gibt grundlegende Schritte für die Benutzerbehandlung durch Auth mit Omniauth:

  1. Benutzer klickt auf „auth with github“
  2. Die Rails-App leitet ihn auf die Github-Seite weiter
  3. Benutzer melden sich bei github an und gewähren Zugriff auf Ihre App
  4. Github leitet den Benutzer zurück zu Ihrer Rails-App
  5. Die Rails-App hat mindestens zwei Dinge: provider und uid
  6. Jetzt können wir diese Informationen verwenden, um Benutzer in der App anzumelden

Abschließend verwenden wir provider und uid von github zurückgegeben, um den Benutzer in unserer App anzumelden/registrieren.

Gehen Sie über Omniauth

Alle nachstehenden Anweisungen beziehen sich auf den Github-Anbieter, aber Sie können jeden verwenden. Alle verfügbaren Strategien mit gefundenen Edelsteinen dort.

wir werden verwenden gem 'omniauth-github' und Renn bundle install

Fügen Sie Routen und Controller hinzu

Wie Sie sich erinnern, leitet der Anbieter nach erfolgreicher Anmeldung den Benutzer zu einer URL auf unserer Seite weiter. Wir sollten dafür eine Route erstellen und sie im Controller handhaben

Omniauth-Callbacks hinzufügen zu config/routes.rb

devise_for :users, :controllers => { :omniauth_callbacks => "callbacks" }

und erstellen Sie einen neuen Controller für den Handle-Callback app/controllers/callbacks_controller.rb

class CallbacksController < Devise::OmniauthCallbacksController
  def github
    @user = User.from_omniauth(request.env["omniauth.auth"])
    sign_in_and_redirect @user
  end
end

Ok, jetzt haben wir Provider und UID von Github, aber was ist mit from_omniauth Methode? Setzen wir sie um!

Fügen Sie Ihrem Modell Support Omniauth hinzu

Hinzufügen uid und provider Felder zur Benutzertabelle

rails g migration AddColumnsToUsers provider uid
bundle exec rake db:migrate

Hinzufügen omniauthable Modul u from_omniauth Klassenmethode zum Modell

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :omniauthable

  def self.from_omniauth(auth)  
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.email = auth.info.email
      user.password = Devise.friendly_token[0,20]
    end
  end
end

Ok, wir sind mit der Codierung fertig. Jetzt müssen wir eine App auf der Anbieterseite erstellen und die Gerätekonfiguration festlegen.

Github-App erstellen

Setzen Sie die Site-URL auf und Rückruf-URL zu users/auth/github/callback

Wenn wir fertig sind, gehen Sie zum config/initializers/devise.rb und fügen Sie die omiauth-Konfiguration hinzu (fügen Sie Ihre Client-ID und Ihr Geheimnis anstelle von Platzhaltern ein)

 config.omniauth :github, 'CLIENT_ID', 'APP_SECRET', :scope => 'user:email'

Gut erledigt! Starten Sie den Server neu und gehen Sie zu „/users/sign_in“, Sie sehen den Link für die Github-Anmeldung.

Sie können die funktionierende Lösung auf sehen github.

Freue mich über Kommentare, Fragen und Anregungen!

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *