0

Я ищу This Guide, чтобы помочь мне настроить функцию «Добавить в корзину» в моем приложении.аутентифицировать пользователя, перенаправить запрос XHR

Изучение нескольких вещей, которые всегда велики, но я не уверен, как подойти к следующему.

Внутри руководства автор разрешает пользователю добавлять в корзину, если они вошли в систему (что также означает, что кнопка не видна до этой точки), однако я не хочу, чтобы это было ограничено, поэтому «Добавить в корзину» всегда будет видно, но при нажатии, если вы не вошли в систему, вы будете перенаправлены на страницу входа/регистрации.

В контроллере мы используем 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 %> 

CoffeeScript

$(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.

Есть ли одна есть какие-либо идеи о том, как подойти к этому, пожалуйста,

Спасибо

+0

В терминале, это журнал что-то вроде ПРЕДУПРЕЖДЕНИЕ: Невозможно проверить подлинность CSRF-токена? – Laurens

+0

нет, не вижу ничего подобного – Richlewis

+0

И вы уже вошли в систему? – Laurens

ответ

1

Вы должны поймать 401 в вашем АЯКС ответ и затем перенаправляет как это:

$(document).on "ajaxError", (event, request, settings) -> 
    if request.status == 401 
     window.location.href = '/' 
+0

Спасибо, извините мой дальнейший вопрос, но twhat, который вы предоставили, придет после '$ .ajax url: url, type: 'put', success: (data) -> 'не совсем уверен на этом этапе, как интегрировать это в текущий файл coffeescript. – Richlewis

+0

Вы можете просто привязать 'ajaxError', как я сделал в примере, или добавить' succes: (data) -> 'and' error: (data) -> 'на ваши собственные вызовы – Laurens

+0

ah я вижу, нормально, так что это работает, но теперь я потерял поведение' authenticated_user', которое перенаправит вас обратно на страницу, с которой я пришел после входа в систему. что можно достичь? спасибо – Richlewis

Смежные вопросы