【Bootstrap】 갑자기 로그 아웃 할 수 없게되었습니다 ~ 왜? CSRF 문제다운~

3494 단어 Bootstrap루비Rails

해결하고 싶은 것



Bootstrap을 도입하고 나서 로그아웃을 할 수 없게 되어 버렸다.

발생한 문제 / 오류



로그인 후, 헤더 부분에 있는 로그아웃 버튼을 누르면 에러 메세지가 나오고, 평생 로그아웃할 수 없다.



해당 소스 코드



application.html.erb
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
    <meta name="generator" content="Jekyll v4.0.1">
    <title>Party Freak</title>

    <%= stylesheet_link_tag 'application', media: 'all'%>

〜以下略〜


이전 소스 코드



application.html.erb
<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Party Freak</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

〜以下略〜

직접 시도한 것


<html><head> 부분의 기술을 도입전에 되돌리면, 로그아웃을 할 수 있게 된다.
최종적으로는 <head> 로부터 아래를 바꾸는 것으로 에러가 나오지 않고, 이전과 같이 로그아웃을 할 수 있게 되었다.
덧붙여 로그인과 신규 투고에 대해서는 문제가 있던 소스 코드로도 되어 있었다.
부분적으로 바꾸어 보거나 여러가지 시험해 봐 몇 충분, 기술을 추가하면 로그아웃 할 수 있게 되는 것을 발견.

application.html.erb
<%= csrf_meta_tags %>
<%= csp_meta_tag %>


이 두 가지였습니다.
조사해 보면 크로스 사이트 리퀘스트 포쥬리에 관한 기술.
Rails가 안전하게 위험하기 때문에 그만두십시오! 라고 주의를 해주고 있다는 것이었습니다.
고맙습니다 Rails 씨, 항상 오류로 화가 나서 미안 해요.

오류가 발생하지 않는 소스 코드(head 이하를 변경했습니다.



application.html.erb

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
    <meta name="generator" content="Jekyll v4.0.1">
    <title>Party Freak</title>
    <%= csrf_meta_tags %>       ⬅️追加
    <%= csp_meta_tag %>        ⬅️追加  
    <%= stylesheet_link_tag 'application', media: 'all'%>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>   ⬅️なぜかこれも追加
〜以下略〜

맨 아래의 JS를 넣지 않으면 로그아웃할 수 없었던 것이 수수께끼입니다.
여러 번 해도 이것이 없으면 안되는 것 같습니다만 이유를 모릅니다.
누군가 이유를 아는 분이 계시면 가르쳐 주시면 다행입니다.

좋은 웹페이지 즐겨찾기