본문 바로가기
Back-End/Ruby

(해결 방법) rails devise sign_up 오류 devise sign up error

by Junmannn 2022. 5. 24.
반응형

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} %>
이 부분이 중요합니다. turbo에게 내가 할게 나대지마! 하는 것입니다
마찬가지로, sessions/new_html.erb 파일도 수정해줍시다
<%= 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 %>
반응형