【发布时间】:2019-05-21 07:10:07
【问题描述】:
我正在查看 this guide 以帮助我在我的应用程序中设置“添加到购物车”功能。
在指南中,作者只允许用户在登录后添加到购物篮(这也意味着该按钮在此之前不可见),但我不想受此限制,所以“添加到购物车”将始终可见,但如果您未登录,则单击时,您将被重定向到登录/注册页面。
在控制器中,我们使用before_filter :authenticate_user!,默认情况下,一旦您注册/登录,它将重定向回您来自的页面(或者我相信,如果这不正确,请告知)。
我遇到的问题是通过 XHR 请求来实现这一点。这是目前的设置
class CartsController < ApplicationController
before_action :authenticate_user!
def show
cart_ids = $redis.smembers current_user_cart
@cart_images = Image.find(cart_ids)
end
def add
$redis.sadd current_user_cart, params[:image_id]
render json: current_user.cart_count, status: 200
end
def remove
$redis.srem current_user_cart, params[:image_id]
render json: current_user.cart_count, status: 200
end
private
def current_user_cart
"cart#{current_user.id}"
end
end
查看
<%=link_to "", data: { target: @cart_action, addUrl: add_to_cart_path(@image), removeUrl: remove_from_cart_path(@image) } do %>
<i class="di-shopping-cart-up"></i>
<span><%= @cart_action %></span> Cart
<% end %>
咖啡脚本
$(window).load ->
$('a[data-target]').click (e) ->
e.preventDefault()
$this = $(this)
if $this.data('target') == 'Add to'
url = $this.data('addurl')
new_target = "Remove from"
else
url = $this.data('removeurl')
new_target = "Add to"
$.ajax url: url, type: 'put', success: (data) ->
$('.badge-number').html(data)
$this.find('span').html(new_target)
$this.data('target', new_target)
当我点击“添加到购物车”时发生的情况是请求失败,控制台中出现401 Unauthorized,响应为You need to sign in or sign up before continuing.
我该如何处理?
【问题讨论】:
-
在您的终端中,是否会记录类似警告:无法验证 CSRF 令牌真实性?
-
不,看不到类似的东西
-
你已经登录了吗?
-
我没有登录,如果我没有登录,我想被重定向
标签: javascript ruby-on-rails ajax ruby-on-rails-4 coffeescript