[Ruby/Rails] 정규 표현식에서 암호를 생성하는 방법

6368 단어 RubyRails

마지막


아래 글을 참고하여 게스트 로그인 기능을 추가했습니다.
단순 로그인 게스트 로그인 기능 구현 방법 (제품 조합용)
참고할 만하고 알기 쉬운 기사 추천!
따라서 이 글의 본론은 제 투자조합 사이트에서 안전성을 강화하기 위해 비밀번호로 검증 기능을 추가했는데 상술한 보도대로 실시하면 오류가 발생하기 때문에 이에 대한 정리를 하고자 합니다.

오류 내용



잘못된 내용은 생성된 암호가 정규 표현식 밖의 문자열로 변한 것 같다는 것이다.
logs/development.log
ActiveRecord::RecordInvalid (バリデーションに失敗しました: パスワードの長さは6文字以上で、大文字、小文字、数字、特殊文字がそれぞれ1つずつ含まれている必要があります。):

app/models/user.rb:41:in `guest'
app/controllers/users/sessions_controller.rb:18:in `new_guest'
암호 생성은 SecureRandom.urlsafe_base64 에서 생성되었지만 수정이 필요합니다.
app/models/user.rb
  def self.guest
    find_or_create_by!(email: '[email protected]') do |user|
      user.password = SecureRandom.urlsafe_base64
      user.name = "ゲスト様"
      user.username = "guest"
      user.confirmed_at = Time.now
    end
  end
검증은 다음과 같은 정규 표현식이다.
app/models/user.rb
  validate :password_complexity
  def password_complexity
    return if password.blank? || password =~ /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,70}$/
    errors.add :password, 'の長さは6文字以上で、大文字、小文字、数字、特殊文字がそれぞれ1つずつ含まれている必要があります。'
  end

전제/구현 환경

  • 개발 환경용 Docker
  • Ruby:2.6.3 Docker 이미지 사용
  • Ruby on Rails:6.0.3
  • devise (4.7.2)
  • 컨텐트 수정


    수정 방법은 다음과 같이 암호를 생성하여 대응했다.
    0-9, a-z, A-Z, 특수 문자의 배열용sample 방법으로 무작위로 4자의 배열로 추출
     ▼ ▼ ▼sum 방법으로 각 그룹을 합치다
     ▼ ▼ ▼shuffle 방법으로 카드를 씻는 그룹의 값
     ▼ ▼ ▼join 문자열에 그룹 문자열을 연결하는 방법
    app/models/user.rb
      def self.guest
        find_or_create_by!(email: '[email protected]') do |user|
          user.password = [
            [*0..9].sample(4),
            [*'a'..'z'].sample(4),
            [*'A'..'Z'].sample(4),
            ['#', '?', '!', '@', '$', '%', '^', '&', '*', '-'].sample(4),
          ].sum([]).shuffle.join
    
          user.name = "ゲスト様"
          user.username = "guest"
          user.confirmed_at = Time.now
        end
      end
    

    마지막


    처음에 나는 SecureRandom 방법 중 정규 표현식에서 비밀번호를 생성하는 방법이 있는지 조사했지만 찾지 못하고 상술한 방법에 이르렀다.
    무리?이런 느낌이 들지만 정규 표현식에서 비밀번호를 만들 수 있어서 정말 좋아요.

    좋은 웹페이지 즐겨찾기