티스토리 뷰
안녕하세요 강정호입니다. 오늘은 navigation바에 로그인, 로그아웃 링크를 처리하는 것에 대해 알아보겠습니다.
작성해야할 내용
1. _navigation.html.erb에서 링크 처리하는 부분
2. application_controller: protected_from_forgery, helper_method, 메서드 3개. 그리고 _navigation.html에서 메서드에 어떻게 접근이 가능한지 알아보기
3. UserController에서 before_action이 하는 역할에 대해서.
4. || = 가 정확히 무엇인지 이해하고 작성하기.
5. <%= %>와 <% %> 의 차이에 대해 알아보기.
ApplicationController에 로그인 유효검사 메서드 작성
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
helper_method :current_user, :logged_in?
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
def logged_in?
!!current_user # current_user가 있으면 true, 없으면 false
end
def require_user
if !logged_in?
flash[:danger] = "You must be logged in to perform that action"
redirect_to root_path
end
end
end
ApplicationController에는 위와 같이 코드가 작성되어 있습니다.
protected_from_forgery : CSRF 공격을 막기 위한 것입니다.(CSRF 공격이란?). CSRF란 한 마디로 요약하면 "해커가 사용자의 회원정보를 탈취하여 회원인것처럼 하는 것" 입니다.
helper_method : ApplicationController에 helper_method를 선언하고 적용할 메서드의 이름을 입력합니다. 그렇게 되면 view에서 Controller의 메서드를 호출할 수 있습니다.
<% if logged_in? %>
<li><%= current_user.username %></li>
<li><%= link_to 'Log out', logout_path, method: :delete %></li>
<li><a href="#">Link</a></li>
위와 같이 View에서 ApplicationController의 current_user와 logged_in? 메서드를 호출하여 View에서 로그인 처리를 할 수 있습니다.
하지만 ApplicationController외에 상속받는 컨트롤러에서는 helper_method를 적용할 수 없습니다.
!!current_user : current_user 메서드를 호출하고, 반환되는 결과값을 느낌표2개(!!) 연산자로 boolean 결과값으로 변환합니다. 느낌표(!)를 연속으로 2개를 입력하면 결과값을 true, false로 변환하여 boolean형태로 반환합니다.
_navigation.html.erb에서 로그인 링크 처리하기
<ul class="nav navbar-nav navbar-right">
<% if logged_in? %>
<li><%= current_user.username %></li>
<li><%= link_to 'Log out', logout_path, method: :delete %></li>
<li><a href="#">Link</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li role="separator" class="divider"></li>
<li><a href="#">Separated link</a></li>
</ul>
</li>
<% else %>
<li><%= link_to 'Login', login_path %></li>
<li><%= link_to 'Sign up', signup_path %></li>
<% end %>
</ul>
<% if logged_in? %> : Embedded Ruby 구문을 사용하여 logged_in? 메서드를 호출합니다. 이 때 current_user 객체가 있다면 true, 아니라면 false를 반환합니다. 그래서 true라면 if문 아래의 구문들이 실행됩니다.
<% else %>
<% %>. : 만약 logged_in?이 false가 나게되면 else 부분이 실행이 되면서 Login, Sign up 문구가 네비게이션 바에 뜨게 된다.
a ||= b 일 때, 이 뜻은 "만약 a가 정의되지 않았거나 false라면 b를 a에 할당한다"는 뜻이다.
a || a=b 라는 뜻인데, 즉 a 또는 a=b 둘 중 하나를 택하는 식이다.
결국 ||= 연산자를 삼항식으로 작성하면 다음과 같은 뜻을 가진다
a ? a : a=b a가 존재하여 true이면 a로 사용하고, false라면 a에 b를 할당하여 사용한다.
예를 들면 다음과 같다.
<% %> : 루비 코드를 실행하는 엠베디드 루비 괄호문. if문, else문 등 어떠한 루비 코드를 실행할 수 있다.
< %= %> : 루비 코드를 실행하고, 무언가를 출력할 때 사용한다. 예를 들면 article 제목, article 내용, user 이름을 출력할 때 사용한다.
1) <%=@article.title %>
2)<%=@article.contents %>
3)<%=@user.name %>
이와 같이 임베디드 루비 코드를 사용하면 View 페이지에서 문자로 출력이 가능하다.
'Back-end' 카테고리의 다른 글
인터프리터 언어와 컴파일 언어의 차이 (0) | 2019.01.13 |
---|---|
[루비온레일즈] 응답처리 (0) | 2019.01.10 |
[루비온레일즈] 게시물 페이징 처리 (0) | 2019.01.09 |
[루비] 루비 프로그래밍 언어 요약 1 (1) | 2019.01.09 |
[루비] RSpec 단위테스트(작성중) (0) | 2019.01.08 |
- Total
- Today
- Yesterday
- front
- 폭포수
- 월급쟁이부자들
- GIT
- 인셉션
- resize
- 개발자 회고
- 항해솔직후기
- 깃허브
- docker
- 월부닷컴
- github
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- Inception
- 부동산공부
- 도커
- 유즈케이스
- 재테크공부
- 깃
- pop_back
- 내년은 빡세게!!
- 관계대수
- Use case
- 항해플러스후기
- 2023년
- Spring boot
- 항해플러스백엔드
- 파라메터
- push_back
- 열반스쿨기초반
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |