gpt4 book ai didi

javascript - 使用主干设备 rails 进行身份验证

转载 作者:行者123 更新时间:2023-12-02 17:14:40 25 4
gpt4 key购买 nike

我是backbone.js 的新手。我正在使用“backbone-on-rails”gem 开发一个 Rails 应用程序。我已经在主干中包含了 3 个模型和渲染 View 。效果很好。现在我想使用设计向我的应用程序添加身份验证,在用户登录后,只需要呈现我的应用程序,否则我需要重定向到登录页面。

我为它添加了 devise gem。

有人可以帮助我如何检查用户是否已登录吗?如果用户尚未登录,则需要使用主干重定向到设计登录页面?

提前致谢

最佳答案

Backbone 是一个仅前端的框架,因此它没有身份验证的概念。所有源代码都发送到 Web 浏览器,并且所有网络连接都是显而易见的,因此恶意用户可以欺骗您的应用程序,使其认为它已登录,即使它没有登录。因此您仍然需要检查服务器上的访问权限。

不过,您可以做的是让您的 Backbone 应用程序检测它是否认为自己已登录,并据此更改其显示。例如,您可以使用 Devise 的 user_signed_in? 帮助程序在您的 body 标记上添加数据属性,并 Hook 到该属性。在您的 app/views/layouts/application.html.erb 中类似这样的内容:

<body data-user-signed-in="<%= user_signed_in? ? "true" : "false" %>">

然后,也许您的主干路由器看起来像这样:

myApp.Routers.Router = Backbone.Router.extend({
routes: {"": "showFrontPage"},
isSignedIn: function() {
return $('body').data('user-signed-in') === "true";
},
showFrontPage: function() {
var view;
if (this.isSignedIn()) {
view = new myApp.Views.MainAppView();
} else {
view = new myApp.Views.SignInView();
}
view.render();
}
});

或者,您可以直接查找 session cookie。不过,这对我来说似乎有点脆弱;如果您的应用程序名称发生更改,或者 Rails 更改了其 cookie 的命名方式,您的应用程序将会崩溃。但在这种情况下,您的 isSignedIn() 函数将看起来更像这样:

isSignedIn: function() { 
return document.cookie.indexOf("_Railsappname_session") > -1;
}

如果您想在应用的各个点检查用户,您可以轻松编写一个 Controller 方法,以 JSON 对象的形式返回 user_signed_in? 的结果。但最好不要依赖于此;与其先调用 /user/is_signed_in 然后再调用 /posts/create,不如先调用 /posts/create 并返回结果如果用户未登录,则返回 401 Unauthorized。

<小时/>

至于登录本身,您可以调整 Devise 通过 JS 工作,这样您就可以通过 AJAX 登录,但这并不像您希望的那么简单。有一个tutorial here .

关于javascript - 使用主干设备 rails 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24544793/

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