gpt4 book ai didi

ruby-on-rails - 真实性 token 仅在 React 组件中提交表单后设置,这会在 Rails 中引发错误

转载 作者:数据小太阳 更新时间:2023-10-29 08:44:44 25 4
gpt4 key购买 nike

我在 React 组件中有一个表单,它仅在登录后第一次提交表单后设置真实性 token 。这些是我遵循的步骤。

  1. 主页是我用来登录的登录表单。 session 已设置,因此您已登录到应用程序。您可以关闭浏览器并返回并仍然处于登录状态。

  2. 去报名参加一个类(class),或者创建一个测验,这些都是通过 POST 提交。

  3. 无效的真实性 token 错误。

  4. 点击后退按钮,所有字段仍然填写。

  5. 按提交,它通过。

第一次知道如何设置它吗?

应用程序 Controller 是

def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end

登录的 Controller 代码是

def create
@user = User.find_by(email: params[:email])
# If the user exists AND the password entered is correct.
if @user && @user.authenticate(params[:password])
# Save the user id inside the browser cookie. This is how we keep the user
# logged in when they navigate around our website.
session[:user_id] = @user.id
if @user.type == 'Student'
redirect_to student_path(@user.id)
elsif @user.type == 'Instructor'
redirect_to instructor_path(@user.id)
end
else
redirect_to login_path
end
end

最佳答案

我注意到您使用的 Rails 有一个

<%= csrf_meta_tags %>

如果您正确设置 session ,它会自动将 session 变量放入 header 中。好吧,React 加载时没有设置你的“token-value”,所以你应该像这样从标题中取出它..

getInitialState: function() {
return {token: ''}
},
componentDidMount: function(e) {
this.setState({token: $('meta[name=csrf-token]').attr('content')})
},

这将确保组件加载并将状态设置为标记值。在那里你可以继续添加

<input name="authenticity_token" type="hidden" value={this.state.token} />

填写您的表格并继续您的一天。

关于ruby-on-rails - 真实性 token 仅在 React 组件中提交表单后设置,这会在 Rails 中引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33068341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com