10월, 2017의 게시물 표시

AdonisJS 4.0 Tutorial

본 튜토리얼에서는 대부분의 사이트에 기본적으로 필요한 기능을 익히는데 목적이 있습니다. 예제에서는 관리자로 로그인/로그아웃하고, 관리자를 등록/수정/삭제 등을 할 수 있는 기본적인 기능을 포함하는 예제를 만들어봅니다. 그리고, 비밀번호의 단방향 암호화(SHA-256)를 해보고, 개인정보(이름,전화번호,이메일 등)을 AES-256 로 암호화하여 DBMS에 저장/관리하는 기능도 포함됩니다. 시작 첫페이지 만들어보기 모델 생성 관리자 목록 보여주기 관리자 추가하기 관리자 비밀번호 변경하기 관리자 수정하기 관리자 삭제하기 비밀번호 단방향암호화(SHA256) 하기 개인정보 양방향암호화(AES256) 하기 로그인/로그아웃 처리하기

(AdonisJs 4.0 Tutorial) 로그인/로그아웃 처리하기

명색이 관리자 화면인데, 아무나 들어와서 조작하면 안되겠지요? 이제는 마지막으로 로그인/로그아웃 처리를 해보겠습니다. 로그인/로그아웃은 세션을 이용해서 구현합니다. 로그인 화면을 구성합니다.  xyz/resources/views/mgmt/index.edge  을 작성합니다. <!DOCTYPE html> < html lang = "ko" > < head > < meta charset = "utf-8" > < meta http-equiv = "X-UA-Compatible" content = "IE=edge" > < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < title > Login < / title > < link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" > < / head > < body >   < div class = "container" style = "margin-top: 20px" > < form action = "/mgmt/login" method = "post" class = "form-horizontal" style = ...

(AdonisJs 4.0 Tutorial) 개인정보 양방향암호화(AES256) 하기

이 예제에는 개인정보 데이터가 없긴 하지만, 별명(Nick)을 개인정보라 간주하고 암호화를 진행해보겠습니다. Adonis 에서는 데이터 암호화를 위해서 Encryption 모듈을 제공하고 있습니다. 데이터를 암호화하고 다시 풀려면, Key 가 있어야 합니다. 이 Key 를  .env  파일에 APP_KEY 로 이미 정의되어 있습니다. xyz/app/Models/Admin.js  에 다음을 추가한다. const Encryption = use ( 'Encryption' )   ...   getNick ( nick ) { return Encryption. decrypt ( nick ) }   setNick ( nick ) { return Encryption. encrypt ( nick ) }   ... DB의 내용을 모두 삭제한 후에, 관리자를 추가해봅니다. 그리고, DB에서 Nick 이 암호화되어 있는지도 봅시다. $ cd database $ sqlite3 development.sqlite SQLite version 3.15.0 2016 - 10 - 14 10 : 20 : 30 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite > select nick from admins; eyJpdiI6IkoxVWhqL2w5V1F4eU5iS2xWSk9ZZUE9PSIsInZhbHVlIjoiWmhuSmJLOWZJb3ZXOWNZM0tHaG1lUT09IiwibWFjIjoiNzMzOGUxNDkzMGJjMGVjNDhlM2NiOGMwZjlkZjdiNDY4NDkxODFmOWRkNTlmZjk1NzczMTBkYTgxNjMyM2QyYSJ9 sqlite > .quit 제대로 암호화되어서 무슨 내용인지 알아볼 수 없네요. ^^; ...

(AdonisJs 4.0 Tutorial) 비밀번호 단방향암호화(SHA256) 하기

정보통신망법, 개인정보보호법 등에 의하면 비밀번호는 단방향암호화(SHA256 등), 개인정보는 양방향암호화(AES256 등)를 하도록 되어 있습니다. 지금까지 작성한 예제는 이런 법에 맞지 않아서 서비스할 수 없겠네요. 여기에서는 비밀번호의 단방향 암호화를 구현해보도록 하겠습니다. Adonis 에서는 비밀번호 암호화에 더 좋다고 하는 bctypt를 제공하고 있지만, 이것이 법에 명시되어 있지는 않아서, SHA256 을 사용하겠습니다. 먼저, 기존 DB에 들어있던 사용자 정보를 모두 삭제합시다. $ cd database $ sqlite development.sqlite SQLite version 3.15.0 2016 - 10 - 14 10 : 20 : 30 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite > select * from admins; 1 | testid1 | passwd1 | nick1 2 | testid2 | passwd2 | nick2 3 | testid3 | passwd3 | nick3 4 | testid4 | passwd4 | nick4 6 | admin | dpeltms3 | ADMIN sqlite > delete from admins; sqlite > select * from admins; sqlite > .quit xyz/app/Models/Admin.js  에 crypto 모듈을 추가하고, setPassword 함수를 추가합니다. ...   const crypto = require ( 'crypto' )   ...   setPassword ( password ) { return crypto. createHash ( 'sha256' ) . update ( password ) . diges...

(AdonisJs 4.0 Tutorial) 관리자 삭제하기

xyz/Controllers/Http/Mgmt/AdminController.js  에 다음을 추가한다. ...   // 관리자 삭제 // /mgmt/admin/delete/:id async delete ( { params , response } ) { const admin = await Admin. find ( params. id ) await admin. delete ( ) return response. route ( 'mgmt_admin' ) }   ... xyz/start/routes.js  에 다음을 추가하고, 관리자 삭제를 해봅니다. Route. get ( '/admin/delete/:id' , 'Mgmt/AdminController.delete' ) . as ( 'mgmt_admin_delete' ) 여기까지 하면, 기본적인 CRUD 기능을 모두 작성할 수 있게 됩니다. *^^*

(AdonisJs 4.0 Tutorial) 관리자 수정하기

xyz/resources/views/mgmt/admin/update_form.edge  을 작성한다. < div class = "modal-header" > < button type = "button" class = "close" data-dismiss = "modal" aria- label = "Close" >< span aria-hidden = "true" > &times; < / span >< / button > < h4 class = "modal-title" > 관리자 수정 < / h4 > < / div > < div class = "modal-body" > < form name = "update_form" action = "/mgmt/admin/update" method = "post" > {{ csrfField() }} < div class = "form-group" > < label > 아이디 < / label > < input type = "text" name = "userid" class = "form-control" readonly required pattern = "[a-zA-Z0-9]+" value = "{{ admin.userid }}" / > < input type = "hidden" name = "id" class = ...