[RUBY] Ich möchte Benutzer mit Devise + OmniAuth bei Rails authentifizieren

Was ich diesmal machen möchte

Grundlegende Benutzerauthentifizierungsfunktion mit Devise

Ich möchte eine Registrierung mit einem Klick für die SNS-Authentifizierung vornehmen, ohne eine temporäre Registrierungs-E-Mail zu durchlaufen

Wenn Sie Benutzerinformationen standardmäßig in Devise bearbeiten, werden Sie jedes Mal nach einem Kennwort gefragt. Da dies jedoch nicht benutzerfreundlich ist, möchte ich Benutzerinformationen bearbeiten, ohne ein Kennwort einzugeben

Persönlicher Zweck dieses Artikels

Memorandum. Behalten Sie den Quellcode für dieses Projekt auf GitHub.

https://github.com/zizynonno/devise_omniauth

1 Einführung in das Gerät

1.1 Projekt erstellen

Erstellen Sie ein neues Projekt.

$ rails new devise_omniauth
$ cd devise_omniauth

1.2 Gemfile hinzufügen und installieren

Fügen Sie dem Gemfile den folgenden Edelstein hinzu.

Gemfile


source 'https://rubygems.org'

(Kürzung)...

# Devise
gem 'devise'
gem 'devise-i18n'
gem 'omniauth-twitter'
gem 'omniauth-facebook'
gem 'dotenv-rails'

Gemfile


gem 'devise' #Benutzerauthentifizierung
gem 'devise-i18n' #i18n entwickeln
gem 'omniauth-twitter' #Twitter-Authentifizierung
gem 'omniauth-facebook' #Facebook-Authentifizierung
gem 'dotenv-rails' #Umgebungsvariablen einstellen

Installieren Sie gem.

$ bundle install

2 Einstellungen vornehmen

Gerätebezogene Dateien hinzugefügt.

$ rails g devise:install

Wenn Sie diesen Befehl ausführen, informiert Sie das Terminal über die Einstellungen in Englisch. Lassen Sie uns von 1 bis 4 laufen.

** 2.1 Standard-URL angeben **

config/environments/development.rb


Rails.application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  (Kürzung)...

  # mailer setting
  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
end

** 2.2 Angabe von root_url ** Geben Sie die Seite an, die angezeigt werden soll, wenn Sie auf * http: // localhost: 3000 / * zugreifen, das in Nr. 1 angegeben ist. Wir haben in diesem Projekt keine Seiten erstellt, daher fügen wir sie zuerst hinzu.

Fügen wir einen Pages-Controller und einen Index hinzu und zeigen Sie Seiten an.

$ rails g controller Pages index show

Geben Sie in route.rb Folgendes an.

config/routes.rb


Rails.application.routes.draw do
  root 'pages#index'
  get 'pages/show'
  (Kürzung)...
end

** 2.3 Flash-Nachricht hinzufügen ** Wenn Sie sich anmelden, wird oben eine Meldung wie "Sie haben sich angemeldet" angezeigt. Fügt das angegebene Tag direkt unter dem -Tag in die folgende Datei ein.

erb:app/views/layouts/application.html.erb


<!DOCTYPE html>
<html> 
 <head>
  <title>DeviseRails5</title>
  <%= csrf_meta_tags %>

  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
 </head>
 <body>
  <%#von hier%>
  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>
  <%#Bisher%>
                                                                                                                
  <%= yield %>

 </body> 
</html>

** 2.4 Geräteansicht generieren **

$ rails g devise:views

Dann wird die folgende Datei generiert.

app/views/devise/shared/_links.html.erb (Teilweise für Link)
app/views/devise/confirmations/new.html.erb (Bildschirm der Authentifizierungsmail erneut senden)
app/views/devise/passwords/edit.html.erb (Bildschirm zum Ändern des Passworts)
app/views/devise/passwords/new.html.erb (Bildschirm zum Senden einer E-Mail, wenn Sie Ihr Passwort vergessen haben)
app/views/devise/registrations/edit.html.erb (Bildschirm zum Ändern der Benutzerinformationen)
app/views/devise/registrations/new.html.erb (Benutzerregistrierungsbildschirm)
app/views/devise/sessions/new.html.erb (Anmeldebildschirm)
app/views/devise/unlocks/new.html.erb (Entsperren Sie den Bildschirm zum erneuten Senden von E-Mails)
app/views/devise/mailer/confirmation_instructions.html.erb (Text zur Bestätigung des E-Mail-Kontos)
app/views/devise/mailer/password_change.html.erb (Mail-Passwort-Änderungsabschlusserklärung)
app/views/devise/mailer/reset_password_instructions.html.erb (Anweisung zum Zurücksetzen des E-Mail-Passworts)
app/views/devise/mailer/unlock_instructions.html.erb (Schalte den Text für die Mail frei)

3 Benutzermodelleinstellungen

3.1 Erstellen eines Benutzermodells

$ rails g devise User

Bei der Ausführung werden die Migrationsdatei und die Benutzerdatei erstellt.

db/migrate/20200912194315_devise_create_users.rb


class DeviseCreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      # ## Trackable
      # t.integer  :sign_in_count, default: 0, null: false
      # t.datetime :current_sign_in_at
      # t.datetime :last_sign_in_at
      # t.string   :current_sign_in_ip
      # t.string   :last_sign_in_ip

      # ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable

      # ## Lockable
      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at


      t.timestamps null: false
    end
  end
end

app/models/user.rb


class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

3.2 Bearbeiten der Migrationsdatei und des Benutzermodells

Ich werde nur diejenigen auskommentieren, die dies verwenden.

db/migrate/20200912194315_devise_create_users.rb


class DeviseCreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      ## Confirmable
      t.string   :confirmation_token
      t.datetime :confirmed_at
      t.datetime :confirmation_sent_at
      t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      t.string   :unlock_token # Only if unlock strategy is :email or :both
      t.datetime :locked_at


      t.timestamps null: false
    end

    add_index :users, :email,                unique: true
    add_index :users, :reset_password_token, unique: true
    add_index :users, :confirmation_token,   unique: true
    add_index :users, :unlock_token,         unique: true
  end
end

Fügen Sie zusätzlich zu dem, was Sie in die Migrationsdatei eingefügt haben, "omniauth_providers: [: twitter ,: facebook]" hinzu, um die OAuth-Authentifizierung durchzuführen.

app/models/user.rb


class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :confirmable, :lockable, :timeoutable, :omniauthable, omniauth_providers: [:twitter,:facebook]
end

3.3 Hinzufügen einer Säule für Omniauth

Fügen Sie dann den in omniauth-twitter, omniauth-facebook verwendeten provider , uid und username zur Benutzertabelle hinzu.

$ rails g migration add_columns_to_users provider uid username

Die folgende Migrationsdatei wird erstellt.

db/migrate/20200912194427_add_columns_to_users.rb


class AddColumnsToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :provider, :string
    add_column :users, :uid, :string
    add_column :users, :username, :string
  end
end

Sobald Sie dies getan haben, gehen Sie wie folgt vor:

$ rake db:migrate

4 Authentifizieren Sie sich mit Twitter, Facebook

4.1 Beziehen Sie jeden API-Schlüssel und geheimen Schlüssel für die Twitter-Authentifizierung und Facebook-Authentifizierung

Facebook

Erstellen Sie eine Anwendung aus den folgenden.

Wenn die Erstellung abgeschlossen ist, wählen Sie "Plattform hinzufügen" -> "Website" aus den Einstellungen. Geben Sie die URL in die Site-URL ein (Beispiel: "http: // localhost: 3000").

Twitter

Erstellen Sie eine Anwendung aus den folgenden.

Nehmen Sie nach Abschluss der Erstellung die folgenden Einstellungen unter "Einstellungen" vor.

  1. Callback URL --Beispiel: http: // ~ / users / auth / twitter
  2. Überprüfen Sie Folgendes:

4.2 Konfigurationsdatei bearbeiten

Kopieren Sie jeden API-Schlüssel und jeden geheimen Schlüssel und fügen Sie ihn an die entsprechenden Stellen unten ein.

config/initializers/devise.rb


Devise.setup do |config|
  # The secret key used by Devise. Devise uses this key to generate
  (Kürzung)...
  config.omniauth :facebook, 'Geben Sie die App-ID ein', 'Geben Sie App Secret ein' #Ich werde es bald korrigieren
  config.omniauth :twitter, 'Geben Sie den API-Schlüssel ein', 'Geben Sie das API-Geheimnis ein' #Bitte verpflichten Sie sich nicht zu GitHub, da wir dies bald korrigieren werden
end

4.3 Rückrufverarbeitung in User Controller implementiert

Sie müssen eine Methode mit demselben Namen wie "Anbieter" definieren. Da die Rückrufverarbeitung jedoch grundsätzlich jedem Anbieter gemeinsam ist, wird sie mit der Methode "callback_from" vereinheitlicht.

$ rails generate devise:controllers users

app/controllers/users/omniauth_callbacks_controller.rb


class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def facebook
    callback_from :facebook
  end

  def twitter
    callback_from :twitter
  end

  private

  def callback_from(provider)
    provider = provider.to_s

    @user = User.find_for_oauth(request.env['omniauth.auth'])

    if @user.persisted?
      flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: provider.capitalize)
      sign_in_and_redirect @user, event: :authentication
    else
      session["devise.#{provider}_data"] = request.env['omniauth.auth']
      redirect_to new_user_registration_url
    end
  end
end

4.4 Routing-Prozess

Richten Sie das Routing für OAuth-Rückrufe wie folgt ein:

config/routes.rb


Rails.application.routes.draw do
  devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }

  # ...
end

5 Privater API-Schlüssel und geheimer Schlüssel

Wir haben jeden API-Schlüssel und geheimen Schlüssel für die Twitter-Authentifizierung und die Facebook-Authentifizierung erhalten. Diese Informationen sind äußerst vertraulich und sollten niemals nach außen weitergegeben werden. Da die Gefahr eines Missbrauchs besteht, müssen Maßnahmen ergriffen werden, um zu verhindern, dass der API-Schlüssel und der geheime Schlüssel versehentlich im Remote-Repository von GitHub oder in der Produktionsumgebung für die Öffentlichkeit freigegeben werden.

Da wir zu Beginn die Bundle-Installation gem'dotenv-Rails haben, um Umgebungsvariablen festzulegen, lernen wir, wie man den API-Schlüssel und den geheimen Schlüssel mit dotenv-Rails verwendet.

** 5.1 Installation der .env-Datei ** Platzieren Sie als Nächstes die ENV-Datei, die die Umgebungsvariablen definiert, im ** Projektstamm der App **. Die .env-Datei wird nicht automatisch generiert, selbst wenn Sie die Installation "dotenv-Rails" bündeln. Daher müssen Sie die Datei manuell mit dem Befehl touch erstellen, wie unten gezeigt.

$ touch .env 

** 5.2 Fügen Sie Folgendes in die .env-Datei ein **

.env


TWITTER_API_KEY="Erhaltener Twitter API-Schlüssel"
TWITTER_SECRET_KEY="Erhaltener geheimer Twitter-Schlüssel"
FACEBOOK_API_ID="Erhaltener Facebook API-Schlüssel"
FACEBOOK_API_SECRET="Erhaltener geheimer Facebook-Schlüssel"

** 5.3 Umgebungsvariablen verwenden ** Weisen Sie der fest codierten Datei Umgebungsvariablen zu, indem Sie eine Beschreibungsmethode wie ENV [SECRET_KEY] verwenden.

config/initializers/devise.rb


Devise.setup do |config|
  # The secret key used by Devise. Devise uses this key to generate
  (Kürzung)...
  config.omniauth :twitter, ENV['TWITTER_API_KEY'], ENV['TWITTER_API_SECRET_KEY']
  config.omniauth :facebook, ENV['FACEBOOK_API_ID'], ENV['FACEBOOK_API_SECRET']
end

6 Fügen Sie dem Benutzermodell eine Methode hinzu

Erstellen Sie im Benutzermodell ** self.from_omniauth ** und ** self.new_with_session **. Wenn Sie in self.from_omniauth nach UID und Anbieter suchen, wird es erstellt, andernfalls wird es erstellt. Wenn Sie für self.new_with_session diese Methode nicht hinzufügen, werden die als Authentifizierungsinformationen erhaltenen UIDs und Anbieter usw. nicht registriert, auch wenn Sie sich nach der Twitter-Authentifizierung auf der Anmeldeseite registrieren. Da sie nicht registriert sind, werden Sie jedes Mal als nicht registrierter Benutzer zur Anmeldeseite weitergeleitet, auch wenn Sie sich bei Twitter authentifizieren.

app/models/user.rb


class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :confirmable, :lockable, :timeoutable, :omniauthable, omniauth_providers: [:twitter]

  def self.from_omniauth(auth)
    find_or_create_by(provider: auth["provider"], uid: auth["uid"]) do |user|
      user.provider = auth["provider"]
      user.uid = auth["uid"]
      user.username = auth["info"]["nickname"]
    end
  end

  def self.new_with_session(params, session)
    if session["devise.user_attributes"]
      new(session["devise.user_attributes"]) do |user|
        user.attributes = params
      end
    else
      super
    end
  end
end

6.1 Implementieren Sie die Suchmethode im Benutzermodell

Die Kombination von "UID" und "Provider" ist einzigartig, was den Benutzer erreicht. Erstellen Sie es, wenn es im Datensatz nicht vorhanden ist.

app/models/user.rb


class User < ActiveRecord::Base
  # ...

  def self.find_for_oauth(auth)
    user = User.where(uid: auth.uid, provider: auth.provider).first

    unless user
      user = User.create(
        uid:      auth.uid,
        provider: auth.provider,
        email:    User.dummy_email(auth),
        password: Devise.friendly_token[0, 20]
      )
    end
    user.skip_confirmation! #Sofortige Registrierung ohne vorübergehende Registrierungs-E-Mail
    user
  end

  private

  def self.dummy_email(auth)
    "#{auth.uid}-#{auth.provider}@example.com"
  end
end

Wenn Sie die Authentifizierung auch mit einer E-Mail-Adresse implementieren, müssen Sie die E-Mail-Adresse bei der Authentifizierung mit OAuth speichern. Hier wird unter Ausnutzung der einzigartigen Kombination von "uid" und "provider" als "self.dummy_email" generiert.

Bearbeiten Sie die folgende Datei so, dass der zuvor erstellte Controller als Controller für den Rückruf aufgerufen wird. Wenn Sie dies nicht schreiben, wird der Controller auf der Geräteseite aufgerufen.

config/routes.rb


Rails.application.routes.draw do
  devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }
  root 'pages#index'
  get 'pages/show'
  (Kürzung)...
end

Sie können sich jetzt bei Twitter authentifizieren. Wenn Sie zum ersten Mal eine Twitter-Authentifizierung durchführen, werden Sie zur Anmeldeseite weitergeleitet, auf der Sie Ihre E-Mail-Adresse und Ihr Passwort eingeben können, um sich zu registrieren, und Ihre Benutzerinformationen werden registriert. Da ich diesmal die bestätigbare Funktion hinzugefügt habe, erhalte ich die Meldung, dass ich nach der Registrierung eine Bestätigungsnachricht gesendet habe und mich nicht so anmelden kann, wie sie ist. Wenn Sie diese Funktion nicht einschließen, werden Sie sofort nach der Registrierung angemeldet.

7 Ich möchte mich sofort für die SNS-Authentifizierung registrieren können, ohne eine temporäre Registrierungs-E-Mail zu durchlaufen.

app/model/user.rb


class User < ActiveRecord::Base
  # ...

  def self.find_for_oauth(auth)
    user = User.where(uid: auth.uid, provider: auth.provider).first

    unless user
      user = User.create(
        uid:      auth.uid,
        provider: auth.provider,
        email:    User.dummy_email(auth),
        password: Devise.friendly_token[0, 20]
      )
    end
######Füge das hinzu!######
user.skip_confirmation!
#######################
    user
  end

  private

  def self.dummy_email(auth)
    "#{auth.uid}-#{auth.provider}@example.com"
  end
end

8 Ich bin es leid, jedes Mal, wenn ich Benutzerinformationen bearbeite, nach einem Passwort gefragt zu werden

8.1 Routen ändern.rb

routes.rb


devise_for :users, controllers: {  }

Rails.application.routes.draw do
  devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks', 
                                         registrations: 'users/registrations' }
  root 'pages#index'
  get 'pages/show'
  (Kürzung)...
end

8.2 Überschreiben Sie die Methode update_resource

registrations_controller.rb


class RegistrationsController < Devise::RegistrationsController

  protected
  #Anhängen
  def update_resource(resource, params)
    resource.update_without_password(params)
  end
end

8.3 Löschen Sie das Formular current_password

erb:views/devise/registrations/edit.html.erb


<div class="field">
    <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
    <%= f.password_field :current_password, autocomplete: "current-password" %>
</div>

Lassen Sie uns dieses Formular löschen.

Jetzt können Sie Ihre Benutzerregistrierungsinformationen eingeben, ohne Ihr Passwort eingeben zu müssen Es ist jetzt möglich zu bearbeiten!

9 Liste der Dokumente für das, was Sie tun möchten

** Erstellen Sie zusätzlich zur grundlegenden Benutzerauthentifizierungsfunktion einen Mechanismus, der die Registrierung mit einem Klick bei der SNS-Authentifizierung ermöglicht. ** ** ** [* Rails *] Verwendung von Devise (Rails5-Version) Verfahren zum Implementieren der Benutzerauthentifizierung mit Devise + OmniAuth in Rails

** Ich möchte Umgebungsvariablen verwenden, um den API-Schlüssel auszublenden und ihn remote zu übertragen (ich möchte App Secret usw. nicht hart codieren) ** [Rails] Verwalten wir Umgebungsvariablen, indem wir verstehen, wie dotenv-Rails installiert und verwendet werden! Einstellungen für Umgebungsvariablen

** Ich möchte die in Twitter oder Facebook registrierte E-Mail anstelle des Dummys in die Datenbank bringen (dies dauert ungefähr 3 Tage) ** Omniauth - E-Mail-Informationen auf Twitter abrufen Versuchen Sie es mit Twitter oauth (erhalten Sie auch eine E-Mail) Versuchen Sie, oauth auf Facebook zu verwenden (erhalten Sie auch eine E-Mail) Probleme und Gegenmaßnahmen, wenn nach dem 9. Juli 2015 keine E-Mail-Adresse mit Facebook-Authentifizierung mehr abgerufen werden kann

** Ich möchte mich sofort registrieren können, ohne eine temporäre Registrierungs-E-Mail zur Authentifizierung über externe Websites wie Twitter, Google und Github zu verwenden. ** Datensätze werden nicht gespeichert, auch wenn die Omniauth-Twitter-Authentifizierung in Devise abgeschlossen ist Überspringen Sie die E-Mail-Überprüfung und E-Mail-Übertragung, wenn Sie sich bei Twitter anmelden [Rails5] Implementierung, die die Registrierung und Anmeldung ohne E-Mail-Adresse durch SNS-Authentifizierung ermöglicht

** Ich möchte mit i18n Geräte ins Japanische übersetzen ** Japanische Lokalisierung mit i18n

** Ich bin es leid, jedes Mal, wenn ich Benutzerinformationen bearbeite, nach einem Passwort gefragt zu werden ** [Gerät] Benutzerinformationen ohne Eingabe eines Passworts bearbeiten

** Registrieren Sie sich als Benutzer nur mit Ihrer E-Mail-Adresse. ** ** ** So registrieren Sie sich als Benutzer mit Gerät nur mit einer E-Mail-Adresse und legen später ein Kennwort fest How To: Email only sign up

** So melden Sie sich bei der Anmeldung mit einer Nicht-E-Mail-Adresse an ** How To: Allow users to sign in with something other than their email address

** Eine Methode, für die beim Aktualisieren der E-Mail-Adresse keine Bestätigung erforderlich ist (ich möchte sie überspringen) ** Müssen Sie im Gerät nach Aktualisierungen der E-Mail-Adresse suchen? Überprüfung der E-Mail-Adresse in Devise überspringen

** Andere ** [Rails] Was tun, wenn "Unauthorized 403 Forbidden" in der Twitter-Authentifizierung des Geräts angezeigt wird? Dokumentation erstellen

Recommended Posts

Ich möchte Benutzer mit Devise + OmniAuth bei Rails authentifizieren
Ich möchte mit Firestore von Rails spielen
[Rails] Ich möchte CSS mit Webpacker laden
Ich möchte eine mit Rails 6 erstellte App an GitHub senden
Ich war süchtig danach, default_url_options mit der Einführung von Rails zu setzen
Ich möchte manuell eine Autorisierungs-E-Mail mit Devise senden
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
Ich möchte Geräte in Rails hinzufügen, kann die Installation jedoch nicht bündeln
[Rails] Ich möchte beim Übergang mit link_to Daten zu Params hinzufügen
Ich möchte ein Komitee mit Rails vorstellen, ohne zu schmutzig zu werden
Ich möchte Java8 für jeden mit Index verwenden
Ich möchte die Aggregationsverarbeitung mit Spring-Batch durchführen
Gerät mit Schienen handhaben
Ich möchte in der Lage sein, Dateien mit refile mit administrate [rails6] zu lesen.
Rails6 Ich möchte ein Array von Werten mit einem Kontrollkästchen erstellen
[Rails] Ich möchte mit RSpec testen. Wir unterstützen Ihren Schritt [Einführungsverfahren]
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte den Dunkelmodus mit der SWT-App verwenden
Ich möchte eine bestimmte Datei mit WatchService überwachen
Ich möchte eine Funktion in der Rails Console definieren
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
Ich möchte die API mit Rails auf mehreren lokal eingerichteten Docker-Composes treffen
Ich möchte Zeichen konvertieren ...
[Schienen] Spalte zum Entwickeln hinzufügen
[Rails] [Bootstrap] Ich möchte die Schriftgröße entsprechend ändern
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
Ich möchte den Startbefehl mit Docker-Compose an Postgres übergeben.
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
Nachdem ich einen Artikel mit Rails Simple Calendar veröffentlicht habe, möchte ich ihn im Kalender wiedergeben.
[Rails] Wie man Edelstein "devise" benutzt
[Schienen] Verwendung von Geräten (Hinweis)
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
Ich möchte SONY Kopfhörer WH-1000XM4 mit LDAC mit Ubuntu 20.04 verbinden! !!
Ich möchte die Generierung / Öffnung einer Protokolldatei mit log4j # FileAppender verknüpfen
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Ich möchte Spring Local Time mit MySQL Time (auch Millisekunden) einfügen.
Ich möchte OutOfMemory bei der Ausgabe großer Dateien mit POI vermeiden
Ich habe versucht, die Bildvorschau mit Rails / jQuery zu implementieren
Ich habe versucht, mit Java zu interagieren
Wovon ich süchtig war, als ich die Google-Authentifizierung mit Rails implementierte
[Schienen] Fügen Sie starke Parameter hinzu, um sie zu entwickeln
Stellen Sie mit dem iPhone eine Verbindung zum Rails-Server her