[RUBY] Generieren Sie ein Testkontokennwort mit Rails SecureRandom.alphanumeric

Ich erstelle eine Anwendung mit Schienen. Beim Implementieren der Anmeldefunktion mit einem Testkonto ist ein Fehler aufgetreten. Notieren Sie sich daher die Lösung, die ich gewählt habe.

Entwicklungsumgebung

Ruby 2.6.5 Rails 6.0.3.3

Implementierungsdetails

Ich habe die Testanmeldefunktion mit dem folgenden Code implementiert.

Controller


class Users::SessionsController < Devise::SessionsController
  #Melden Sie sich als Gastbenutzer an
  def new_guest
    user = User.find_or_create_by!(nickname: 'Gastbenutzer', email: '[email protected]') do |user|
    user.password = SecureRandom.alphanumeric
    end
    sign_in user
    redirect_to root_path, notice: 'Sie haben sich als Gastbenutzer angemeldet.'
  end
end

Modell

 #Stellen Sie die Validierung so ein, dass nur alphanumerische Zeichen mit halber Breite zulässig sind
  PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i.freeze
  validates_format_of :password, with: PASSWORD_REGEX, on: :create, message: 'Bitte geben Sie sowohl alphabetische Zeichen mit halber Breite als auch Zahlen mit halber Breite an'

Selbst in der Entwicklungsumgebung ist kein Fehler aufgetreten und der Test wurde bestanden. Als ich ihn in der Produktionsumgebung bereitstellte, wurde "Entschuldigung, etwas ist schief gelaufen" angezeigt.

Ursache

Weil SecureRandom.alphanumeric ein Passwort mit nur Buchstaben ausgegeben hat. Zunächst wird Secure Random in Referenz wie folgt erläutert.

Ein Modul, das eine Schnittstelle für sichere Zufallszahlengeneratoren bietet. Geeignet für HTTP-Sitzungsschlüssel usw.

Und "alphanumerisch" ist eine Art Methode des SecureRandom-Moduls, das zufällige alphanumerische Zeichen generiert. Es wird jedoch nicht immer durch Mischen von alphanumerischen Zeichen generiert.

Konsole


pry(main)> SecureRandom.alphanumeric
=> "NNCMHbfUbHRQmbwW"

Die Wahrscheinlichkeit ist nicht hoch, aber wie oben erwähnt, kann ein Passwort mit nur Buchstaben generiert werden.

Lösung


class Users::SessionsController < Devise::SessionsController
  #Melden Sie sich als Gastbenutzer an
  def new_guest
    user = User.find_or_create_by!(nickname: 'Gastbenutzer', email: '[email protected]') do |user|
    user.password = SecureRandom.alphanumeric(10) + [*'a'..'z'].sample(1).join + [*'0'..'9'].sample(1).join
    end
    sign_in user
    redirect_to root_path, notice: 'Sie haben sich als Gastbenutzer angemeldet.'
  end
end

Es ist eine brutale Kraft geworden, aber "[" a "..." z "] .sample (1) .join + [ '0' .. '9'] .sample (1) .join" Durch Setzen von `werden immer zwei Buchstaben aus Buchstaben + Zahlen am Ende des Passworts eingegeben, so dass kein Passwort mit nur Buchstaben oder Zahlen generiert wird.

Recommended Posts

Generieren Sie ein Testkontokennwort mit Rails SecureRandom.alphanumeric
[Rails] Testcode mit Rspec
Erstellen eines Testflusses auf CircleCI mit Jib
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
[Rails] Ich habe eine Entwurfsfunktion mit enum erstellt
Einführung in Rspec, ein Testframework für Ruby on Rails
So generieren Sie einen Primärschlüssel mit @GeneratedValue
[Rails] Erstellen einer Brotkrumenliste mit Gem gretel
[Für Anfänger] Verfahren zum Erstellen eines Controllers mithilfe von Schienen
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
[Rails / RSpec] Schreiben Sie einen Modelltest (mit Shoulda Matchers / FactoryBot)
So generieren Sie manuell ein JWT mit Knock in Rails