顺便说一句,我是一名学生,如何在汉堡菜单中的 React on Rails 中添加注销

Posted

技术标签:

【中文标题】顺便说一句,我是一名学生,如何在汉堡菜单中的 React on Rails 中添加注销【英文标题】:How do I add a logout in React on Rails in a Hamburger menu, I'm a student, by the way 【发布时间】:2019-06-19 21:27:27 【问题描述】:

我正在使用 React on Rails,目前正在使用 ERB 组件注销。我正在为应用程序创建一个汉堡菜单并将注销放入其中。目前它只是在 Rails 中使用<%= link_to "Logout", destroy_user_session_path, method: :delete %> 坐在开幕式上。我想把它放在 React 组件中。请帮忙。我对使用 React on Rails 还是很陌生。代码如下。

import React,  Component  from 'react'

class MenuContent extends Component 
  constructor(props) 
    super(props)

  

  render() 
    return (
      <div className="menu">
        <div className="Logout">
        I'm trying to add the javascript code here. Here how I'm doing it in Ruby. 
 <%= link_to "Logout", destroy_user_session_path, method: :delete %>
        </div>

        <p className="hint">Click outside the menu to close it, or swipe it closed on touch device</p>
      </div>
    )
  


export default MenuContent

这个^ 被导入到这里(下)。它适用于其余代码。

import React, Component from 'react'
import CheeseburgerMenu from "cheeseburger-menu";
import HamburgerMenu from "react-hamburger-menu";
import MenuContent from "./MenuContent";

class Navbar extends Component 
  constructor(props) 
    super(props);

    this.state = 
      menuOpen: false
    ;
  

  openMenu() 
    this.setState( menuOpen: true );
  

  closeMenu() 
    this.setState( menuOpen: false );
  
  render()
    return(
      <div>
        <CheeseburgerMenu
          isOpen=this.state.menuOpen
          closeCallback=this.closeMenu.bind(this)>
          <MenuContent closeCallback=this.closeMenu.bind(this) />
        </CheeseburgerMenu>

        <HamburgerMenu
          isOpen=this.state.menuOpen
          menuClicked=this.openMenu.bind(this)
          width=32
          height=24
          strokeWidth=3
          rotate=0
          color="black"
          borderRadius=0
          animationDuration=0.5 />
      </div>
    )
  


export default Navbar

【问题讨论】:

【参考方案1】:

我使用此代码注销了工作。感谢所有回复的人。

import React,  Component  from 'react'
import axios from 'axios'

// import './menuContent.scss'

class MenuContent extends Component 
  constructor(props) 
    super(props)
  
   handleLogout = () => 
const link = document.createElement('a');
link.setAttribute('href', '/users/sign_out');
link.setAttribute('rel', 'nofollow');
link.setAttribute('data-method', 'delete');
document.body.appendChild(link);
link.click();


  render() 
    return (
      <div className="grandMenu">
          <div className="menu">
            <div className="signButton"></div>
              <button onClick=this.handleLogout>Sign Out</button>
            <p>hello world</p>
          </div>
            <p className="hint">
              Click outside the menu to close it, or swipe it away.
            </p>
        </div>
    )
  



export default MenuContent

附:我应该在前面提到这一点。登录是通过 API 并使用设计。

【讨论】:

【参考方案2】:

您实际上可以通过客户端注销。 所有 rails session 所做的是设置浏览器 cookie。您可以通过打开控制台并输入来检查

document.cookie

如果您已登录,您可能会看到类似

"auth_token=icHQZ7QB5WK1PPXCWIiF0A"

auth_token 是 cookie 名称。要删除此 cookie,您需要将其过期日期设置为过去:

document.cookie = 'auth_token=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
// Replace 'auth_token' with whatever cookie name you're using.

如果可行,这意味着在您的 React 上,您只需执行类似的操作

import React,  Component  from 'react'

class MenuContent extends Component 
  onLogout = () => 
    document.cookie = 'auth_token=;expires=Thu, 01 Jan 1970 00:00:01 GMT;'
  

  render() 
    return (
      <div className="menu">
        <div onClick=this.onLogout className="Logout">
          Click to Log Out
        </div>
        <p className="hint">
          Click outside the menu to close it, or swipe it closed on touch device
        </p>
      </div>
    )
  


export default MenuContent

【讨论】:

感谢您的回复。我在控制台中使用了 document.cookie,但在终端中使用“rails s”时什么也没有出现。我使用“设计”是否重要? 确保您已登录。并在浏览器控制台中键入 document.cookie。

以上是关于顺便说一句,我是一名学生,如何在汉堡菜单中的 React on Rails 中添加注销的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SenCha Touch 中的商店检索数据

如何跟踪 next.js 中的活动链接?

我如何在 Cocoa 中获取应用程序菜单

将字符串转换为整数。为啥会出现这个错误?我想将 ID(字符串)更改为 IC(整数)。两者都是数组。顺便说一句,我还是个初学者

获取 Toolbar 的导航图标视图参考

清理构建时如何防止删除构建目录?