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.
Ruby 2.6.5 Rails 6.0.3.3
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.
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.
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