【问题标题】:How do you pass devise authentication details to a rails controller action?如何将设计身份验证详细信息传递给 rails 控制器操作?
【发布时间】:2011-05-15 07:05:52
【问题描述】:

我有一个控制器动作,预计会被 jquery 调用。这是电话:

    $.ajax({
        url: "/comments.json",
        type: "POST",
        dataType: "json",
        data: {
            commentable_id: $("#addCommentForm").attr("data-site-update-id"),
            commentable_type: 'SiteUpdate',
            content: $("#addCommentForm textarea#content").val()
        },
        success: function(comment) {

        }
    });

它工作得很好,但由于某种原因,“current_user”在控制器内部是 nil。如果我强制authenticate_user!作为一个过滤器,rails 返回一个 HTTP Unauthorized。

如何传递身份验证详细信息,以便此控制器操作与设计一起使用?更好的是,有没有办法让这个透明?我不想一遍又一遍地为每个 ajax 请求传递身份验证详细信息...

在 Java 中,一旦用户登录......他们就登录了。您不再需要从 url 到 url 传递任何东西——它在某个地方的会话中,并且一切都透明地发生。有没有办法用rails做到这一点?我不想关注这些细节。

谢谢

编辑:解决方案是将以下内容添加到您的 javascript 某处:

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

【问题讨论】:

    标签: ruby-on-rails ruby authentication controller devise


    【解决方案1】:

    Devise 确实维护会话。

    This 可能是你的问题。

    【讨论】:

    • 这似乎完全是问题所在......但不幸的是,这些解决方案都没有奏效。使用 jquery-rails 会是问题吗?我完全迷失了:(看起来rails中的很多事情真的很容易,但如果你遇到问题,它实际上会很奇怪,很难弄清楚发生了什么。至少我们知道问题是什么——会话被丢弃,就像其他人发生的一样。
    • 啊,我必须将令牌添加到 xhr 请求中。
    • 嘿,你能告诉我你是如何解决这个问题的吗?我有个类似的问题。谢谢。
    猜你喜欢
    • 2020-06-25
    • 2016-12-02
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多