안전한 비밀번호 처리(Ruby on Rails)
4402 단어 초보자passwordRails프로그래밍 공부 일기
프로그래밍 공부 일기
2020년 7월 25일 Progate Lv.223
Ruby on RailsⅩⅠ
개요
지금까지 작성한 앱은 패스워드가 보통의 문자열로서 보존되어 있다. 이것으로 PC의 엿보기나 해킹되어 데이터가 도난당한 경우에 그 비밀번호를 사용하여 쉽게 타인의 계정에 부정 로그인할 수 있다.
→안전성이 높은 패스워드는 만일 들여다보거나 데이터가 도난당해도 패스워드의 내용을 모르는 상태이다. 암호를 복잡한 문자열(암호화된 특수 문자열)으로 함으로써 안전성을 높일 수 있다.
Gemfile 편집
Rails로 패스워드를 암호화할 때는 gem(읽는 방법: 「젬」)이라고 하는 툴을 이용한다. gem은 Ruby나 Rails로 프로그래밍을 할 때 "자주 사용하는 기능"을 패키지화한 것이다. 다양한 gem이 존재하지만, 이번은 bcrypt
라고 하는 암호화하기 위한 gem을 사용한다.
Rails에는 설치하고 싶은 gem을 기술하는 Gemfile이라는 파일이 존재한다. gem 'gemの名前'
라고 기술한다. rails new
명령으로 생성 된 Gemfile에는 이미 일부 gem이 작성되어 설치되어 있습니다.gem 'gemの名前', 'gemのバージョン'
라고 하면(자), 그 버젼이 인스톨 된다. 버전을 지정하지 않으면 최신 gem이 설치됩니다.
Gemfilegem 'rails', '5.0.3'
gem 'puma', '3.6.2'
bcryptのインストール
gem 'bcrypt'
터미널$ bundle install
암호화
지금까지 작성한 앱은 패스워드가 보통의 문자열로서 보존되어 있다. 이것으로 PC의 엿보기나 해킹되어 데이터가 도난당한 경우에 그 비밀번호를 사용하여 쉽게 타인의 계정에 부정 로그인할 수 있다.
→안전성이 높은 패스워드는 만일 들여다보거나 데이터가 도난당해도 패스워드의 내용을 모르는 상태이다. 암호를 복잡한 문자열(암호화된 특수 문자열)으로 함으로써 안전성을 높일 수 있다.
Gemfile 편집
Rails로 패스워드를 암호화할 때는 gem(읽는 방법: 「젬」)이라고 하는 툴을 이용한다. gem은 Ruby나 Rails로 프로그래밍을 할 때 "자주 사용하는 기능"을 패키지화한 것이다. 다양한 gem이 존재하지만, 이번은 bcrypt
라고 하는 암호화하기 위한 gem을 사용한다.
Rails에는 설치하고 싶은 gem을 기술하는 Gemfile이라는 파일이 존재한다. gem 'gemの名前'
라고 기술한다. rails new
명령으로 생성 된 Gemfile에는 이미 일부 gem이 작성되어 설치되어 있습니다.gem 'gemの名前', 'gemのバージョン'
라고 하면(자), 그 버젼이 인스톨 된다. 버전을 지정하지 않으면 최신 gem이 설치됩니다.
Gemfilegem 'rails', '5.0.3'
gem 'puma', '3.6.2'
bcryptのインストール
gem 'bcrypt'
터미널$ bundle install
암호화
gem 'rails', '5.0.3'
gem 'puma', '3.6.2'
bcryptのインストール
gem 'bcrypt'
$ bundle install
has_secure_password
라는 메서드를 사용할 수 있습니다. 암호를 처리하는 User 모델에 has_secure_password
를 추가합니다. 이제 사용자를 저장할 때 자동으로 암호를 암호화합니다. user.rb
class User < ApplicationRecord
has_secure_password
end
has_secure_password
는 password가 존재하는지 자동적으로 체크한다.passwor_digest
열을 추가합니다. has_secure_password
메서드는 암호화 된 암호를 passwor_digest
열에 저장합니다. rails generate migration
명령으로 마이그레이션 파일을 작성하고 passwor_digest
열이 추가되도록 편집하십시오. 그런 다음 password
열이 삭제되도록 편집합니다. 컬럼의 삭제는 remove_column
를 사용한다. 하나의 마이그레이션 파일로 여러 열을 변경할 수 있습니다. 터미널
$ rails generate migration change_users_columns
マイグレーションファイル変更後
$ rails db:migrate
2020~_change_users_columns.rb
class ChangeUsersColumns < ActiveRecord::Migration[5.0]
def change
add_column :users, :password_digest, :string
remove_column :users, :password, :string
end
end
password_digest
컬럼에 암호화 된 패스워드를 보관 유지하기 위해서는 지금까지대로 password
에 값을 대입한다. 이제 has_secure_password
는 password
에 할당 된 값을 암호화하고 password_digest
열에 저장합니다. 그래서 이미 있다 password
에 관한 코드는 변경하지 않아도 된다. 암호화된 비밀번호로 로그인
폼에 입력된 메일 주소와 일치하는 사용자를 취득하고, 폼에 입력된 패스워드와 취득한 사용자의 패스워드가 일치하는지를 판정한다. has_secure_password
메서드를 활성화하면 authenticate
메서드를 사용할 수 있습니다. authenticate
는 전달 된 인수를 암호화하고 password_digest
의 값과 일치하는지 여부를 결정합니다. authenticate
메소드를 사용해, 「송신된 메일 주소와 일치하는 유저」의 password_digest
와 송신된 패스워드가 일치하는지 어떤지로 로그인 처리를 한다.
users_controller.rbdef login
@user = User.find_by(email: params[:email])
if @user && @user.authenticate(params[:password])
Reference
이 문제에 관하여(안전한 비밀번호 처리(Ruby on Rails)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mzmz__02/items/61423e7259c4624f3010
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def login
@user = User.find_by(email: params[:email])
if @user && @user.authenticate(params[:password])
Reference
이 문제에 관하여(안전한 비밀번호 처리(Ruby on Rails)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mzmz__02/items/61423e7259c4624f3010텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)