我正在工作的任务,我应该允许用户执行一些操作,如果它登录,在情况下,如果它不是我应该重定向用户到登录页面。
项目本身是使用Ruby on Rails, Reactjs构建的。它使用嵌入式ruby (erb)来显示Login按钮。对于渲染组件本身,它使用React。
我的问题是,即使在用户登录后,我不明白如何在我的React组件中创建一个检查用户是否登录的条件。
登录模板:(application.html.erb)
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
<title>Kittynews</title>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all' %>
<%= javascript_include_tag 'application' %>
</head>
<body>
<header class="box header">
<div class="home">
<%= link_to 'Home', root_path %>
</div>
<div class="session">
<% if user_signed_in? %>
<span>Hi <%= current_user.name %>,</span>
<%= link_to 'Logout', destroy_user_session_path, data: { method: :delete } %>
<% else %>
<%= link_to 'Login', new_user_session_path %>
<% end %>
</div>
</header>
<% if alert.present? || notice.present? %>
<div class="notice">
<%= alert || notice %>
</div>
<% end %>
<section class="content">
<%= yield %>
</section>
</body>
</html>
在React组件中,我需要添加一个条件来检查:如果按钮被登录的用户点击了,它应该对评论进行投票。如果用户没有登录-它应该重定向到登录页
import * as React from 'react';
import gql from 'graphql-tag';
import { useQuery } from 'react-apollo';
import renderComponent from './utils/renderComponent';
const QUERY = gql`
query PostsPage {
viewer {
id
}
ReviewsAll {
id
title
tagline
url
commentsCount
votes
}
}
`;
function upVote(review) {
review.votes += 1;
}
function ReviewsIndex() {
const { data, loading, error } = useQuery(QUERY);
if (loading) return 'Loading...';
if (error) return `Error! ${error.message}`;
return (
<div className="container">
{console.log(data.reviewsAll)}
{data.reviewsAll.map((review) => (
<article className="review" key={review.id}>
<h2>
<a href={`/reviews/${review.id}`}>{review.title}</a>
</h2>
<div className="myUrl">
<a href={review.url}>{review.url}</a>
</div>
<div className="tagline">{review.tagline}</div>
<footer>
<button onClick={() => upVote(review)}>🔼 {review.votes} </button>
</footer>
</article>
))}
</div>
);
}
renderComponent(ReviewsIndex);
我是React和Ruby的新手,以前使用过Agular/Flask。非常感谢您的支持!
尝试设计gem来解决rails中的登录/注册问题。
https://rubygems.org/gems/devise
查看如何安装和使用它,我参考codemy-Yotube