InvalidAuthenticityToken,Ajax,带设备的Rails 5

我正在使用Rails 5和Devise进行Ajax身份验证。 表格用户列已被阻止,如果用户被阻止,他将被注销。 我已经为全球的Ajax设置了标题:

$(document).ajaxSend(function(e, xhr, options) {
    var token = $("meta[name='csrf-token']").attr("content");
    xhr.setRequestHeader("X-CSRF-Token", token);
});

这是SessionsController中替换的创建方法:

def create  
    if warden.authenticate(:scope => resource_name)
        if current_user.blocked
            sign_out(@user)
            return render json: {blocked: true}
        else
            return render json:{success: true}
        end
    else
        return render json: {error: true}
    end
end

如果用户被阻止,并且他尝试验证来自服务器的响应是{blocked: true} 。 如果不刷新页面,如果他再次尝试,则返回错误:

ActionController ::用户:: SessionsController中的InvalidAuthenticityToken#创建ActionController :: InvalidAuthenticityToken提取的源代码(在第195行左右):

我在标题中看到,每次用户尝试登录时都会发送令牌。 我知道这可能是问题,因为第一次登录后令牌被更改,但因为请求是使用Ajax,它可以获得新的令牌,但我不知道如何解决该问题。


您可以在ajax完成时使用ajaxComplete事件,并在完成登录请求后设置meta [name ='csrf-token']内容。

链接地址: http://www.djcxy.com/p/81145.html

上一篇: InvalidAuthenticityToken, Ajax, Rails 5 with Device

下一篇: Rails, Can't verify CSRF token authenticity