Rails 에는 정말 많은 gem 들이 있습니다. 이 중 웹사이트를 개발할 때에 가장 많이, 그리고 가장 기본적으로 사용이되는 회원 관리 부분을 볼 것입니다.
Admin을 이야기 하는 것이 아니라, 회원 가입, 로그인, 로그아웃 등을 구현할 것입니다. 여기서 많은 오류들을 만나게 될텐데, 천천히 잘 따라만 오시면 됩니다
로그인, 회원가입 페이지 만들기
1. blog 라는 이름의 프로젝트를 생성할 것입니다
$ rails new blog
2. Devise 라는 회원가입, 로그인 기능 gem 을 설치합니다
$ bundle add devise
3. 번들을 추가 했으니 설치를 합니다
$ rails g devise:install
4. User 라는 이름으로 devise 만들되, 저는 추가로 role(권한) 필드를 정수 타입으로 추가로 주면서 만들 것입니다
$ rails g devise User role:integer
5. 이렇게 만들고 난 후, db/migrate 폴더에 보면 생성시간_devise_create_users.rb 파일을 열어주고, 권한이 생성 될 때에는 기본적인 디폴트 값이 0으로 생성이 되도록 합니다
t.integer :role, default: 0
6. 데이터 구조 사항 설정까지 했으니, db 상태를 입력시켜줍니다 (teminal 에서)
$ rails db:migrate
7. pages 라는 컨트롤러를 만들 것이며 이 녀석을 home 으로 사용을 해야겠습니다
$ rails g controller pages home
config/routes.rb로 가서 라우팅 설정을 변경할 것입니다
root 'pages#home'
터미널에서 rails 서버를 켜고 브라우저에서 localhost:3000 으로 들어가게 되면, 제대로 작동을 하고 있는 것을 볼 수 있어요.
$ rails s
8. html 을 조금 입혀, 로그인을 했으면 반갑다 인사를 해주고, 그렇지 않다면 로그인 하지 않았으니, 로그인 페이지로 안내를 해줄게요
views/pages/home.html.erb 파일을 수정해주겠습니다
<h1>Pages#home</h1>
<p>Find me in app/views/pages/home.html.erb</p>
<% if current_user %>
<p>Hello <%=current_user.email%>!</p>
<p>
Junmannn의 개발 Archive 에 오신 것을 환영합니다
</p>
<% else %>
<p>You are not signed in.</p>
<%= link_to "Sign Up!", new_user_registration_path %>
<br>
<%= link_to "Login", new_user_session_path%>
<% end %>
여기까지는 여타 다른 강의나 포스팅과 다를 것이 없습니다. 하지만, 여기서 문제가 생기죠.
최근 레일즈 버전에서 실행을 해 보았을 때, 여기서 sign up 을 들어가 이메일과 비밀번호로 계정을 생성하면 오류가 마구 뜨게 되죠.
너무 깜찍한 결과가 나옵니다!
에러가 떠서 찾아 오신 분들은 이 문제 해결 하러 오셨죠?
오류의 원인은 turbo link 를 설정을 하지 않아서에요.
오케이, 이제 해결할테니, 잘 따라와주세요. 일단 rails s 커멘드로 서버를 실행시키고 있는 터미널로 가서 ctrl + c 키로 서버를 종료시켜주세요.
문제 해결
1. devise 를 위한 view들을 만들어 줍니다
$ rails g devise:views
2. 생성된 views/devise 에는 devise 가 행하는 행동들에 대해서 우리가 커스텀을 할 수 있도록 해주는 view 가 생성이 된 것입니다. 우리는 일단 회원 가입이나 로그인 등, 즉 registration, session 을 볼 것이니 일단
registrations의 new.html.erb 에서 submit, 즉 결과를 전송하는 부분을 수정해줍시다.
<%= f.submit "Sign up", data: {turbo: false} %>
<%= f.submit "Log in", data: {turbo: false} %>
3. 모두 저장한 후, 서버를 다시 켜서, 회원가입을 진행해봅시다
$ rails s
해결했습니다! 지금 이 포스팅의 작성일은 2022.05.24 입니다. 이후, 해당 방법이 제대로 적용이 되지 않는다면, 댓글 주세요. 다른 방법을 함께 구글링해봅시다.
+ 로그아웃 기능도 만들고 싶으면,
views/pages/home.html.erb 파일에 추가할게요
<h1>Pages#home</h1>
<p>Find me in app/views/pages/home.html.erb</p>
<% if current_user %>
<p>Hello <%=current_user.email%>!</p>
<p>
Junmannn의 개발 Archive 에 오신 것을 환영합니다
</p>
<%= link_to "로그아웃", destroy_user_session_path, 'data-turbo-method': :delete %>
<% else %>
<p>You are not signed in.</p>
<%= link_to "Sign Up!", new_user_registration_path %>
<br>
<%= link_to "Login", new_user_session_path%>
<% end %>
'Back-End > Ruby' 카테고리의 다른 글
rails i18n 하는 방법, rails 언어처리 (5분 내외) (2) | 2022.12.08 |
---|---|
Rails CRUD - 데이터 저장이 잘 되었는지 확인하는 방법 (0) | 2022.10.03 |
(해결) LoadError: cannot load such file -- sass (0) | 2022.05.19 |
루비 온 레일즈 rails Gem 설치 다운로드 방법 (0) | 2022.05.19 |
(해결) ActionController::InvalidAuthenticity Token 오류 Mysql2::Error: Field 'id' doesn't have a default value 오류 (0) | 2022.05.18 |