Je crée une application avec des rails. J'ai eu une erreur lorsque j'ai implémenté la fonction de connexion avec un compte de test, alors gardez une trace de la solution que j'ai prise.
Ruby 2.6.5 Rails 6.0.3.3
J'ai implémenté la fonction de connexion de test avec le code suivant.
`` Contrôleur ''
class Users::SessionsController < Devise::SessionsController
#Connectez-vous en tant qu'utilisateur invité
def new_guest
user = User.find_or_create_by!(nickname: 'Utilisateur invité', email: '[email protected]') do |user|
user.password = SecureRandom.alphanumeric
end
sign_in user
redirect_to root_path, notice: 'Vous vous êtes connecté en tant qu'utilisateur invité.'
end
end
`` Modèle ''
#Définir la validation pour autoriser uniquement les caractères alphanumériques demi-largeur
PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i.freeze
validates_format_of :password, with: PASSWORD_REGEX, on: :create, message: 'Veuillez inclure les caractères alphabétiques demi-largeur et les nombres demi-largeur dans'
Même dans l'environnement de développement, aucune erreur ne s'est produite et le test a réussi, donc lorsque je l'ai déployé dans l'environnement de production, "Désolé, une erreur s'est produite." S'affiche.
Parce que `` SecureRandom.alphanumeric '' a émis un mot de passe avec seulement des lettres. En premier lieu, Secure Random est expliqué comme suit dans Reference.
Un module qui fournit une interface pour les générateurs de nombres aléatoires sécurisés. Convient aux clés de session HTTP, etc.
Et «alphanumérique» est une sorte de méthode du module SecureRandom, qui génère des caractères alphanumériques aléatoires. Cependant, il n'est pas toujours généré en mélangeant des caractères alphanumériques.
console
pry(main)> SecureRandom.alphanumeric
=> "NNCMHbfUbHRQmbwW"
La probabilité n'est pas élevée, mais comme mentionné ci-dessus, un mot de passe avec seulement des lettres peut être généré.
class Users::SessionsController < Devise::SessionsController
#Connectez-vous en tant qu'utilisateur invité
def new_guest
user = User.find_or_create_by!(nickname: 'Utilisateur invité', 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: 'Vous vous êtes connecté en tant qu'utilisateur invité.'
end
end
C'est devenu une force brute, mais `` [* 'a' .. 'z'] .sample (1) .join + [* '0' .. '9'] .sample (1) .joinEn réglant
, deux caractères de lettres + chiffres sont toujours saisis à la fin du mot de passe afin qu'un mot de passe avec uniquement des lettres ou des chiffres ne soit pas généré.
Recommended Posts