检查用户是否已在客户端登录
Check if user has logged in on client side
有没有一种安全的方法可以检查用户是否已登录应用程序,而不是检查用户机器中是否存在"sid"cookie?
我想允许用户仅在登录后继续访问页面上的某些链接。
我在服务器端进行登录验证,但想避免请求跳闸。
纯JS或JQuery解决方案将不胜感激。
谢谢。
请尝试这个
将此代码放在用户首次登录后
jQuery(window).load(function() {
sessionStorage.setItem('status','loggedIn')
});
当用户点击链接时,您可以检查喜欢
if (sessionStorage.getItem('status') != null))
//redirect to page
}
else{
//show validation message
}
当你要求一个"安全的方式"时:不。应始终在服务器端验证用户会话的所有请求。
不过,您可以做的是使前端适应用户的当前状态。例如,将"登录"链接更改为"注销"链接。为此,您可以在用户计算机上设置一些旗帜之王。您可以使用浏览器本地存储来执行此操作(http://www.w3schools.com/html/html5_webstorage.asp(。
例如,您可以做的其他事情是更改例如链接的行为:
$("a").click(function(e){
if(localStorage.getItem("isLoggedIn") !== true) {
e.preventDefault();
// this prevents navigation and you can now do your js stuff here
}
});
如果您使用的是 ASP.Net 身份,则可以按如下方式进行检查
在剃刀中:
@inject SignInManager<ApplicationUser> SignInManager
@if (SignInManager.IsSignedIn(User))
{
<input type="hidden" id="logged" value="true" />
}
else
{
<input type="hidden" id="logged" value="false" />
}
在 JS 中:
function check() {
var signed = $('#logged').val();
if (signed === 'true') {
//What you want to do
}
else {
window.location.href = "/YourController/YourAction?ReturnUrl=/YourReturnUrl;
}
}
它应该 100% 有效
将此代码放在用户登录页面(登录页面下一页(
jQuery(window).load(function() {
sessionStorage.setItem('status','loggedIn')
});
当用户点击链接时,您可以使用以下代码检查任何页面(任何页面(
if (sessionStorage.getItem('status') != null){
//redirect to page
alert("Is Login : True");
}
else{
//show validation message
alert("Is Login : False");
}
过期日期的authToken
保存到本地存储中,然后在每次请求某些内容时检查它是否过期(不包括 GET(,并与服务器验证authToken
是否已过期。 2 种验证方式。
和客户端到服务器。两者将正确匹配。
解决方案是将此信息作为会话变量存储在服务器上(使用 php(,然后使用 ajax 在 javascript 中检索此信息。
我将分享我的客户端验证方法,同时减少对服务器的调用次数。使用会话存储进行验证不是一个好方法 imo,因为它不在选项卡之间共享。
-
当用户登录到您的网站并将请求发送到您的服务器时,生成一个 JWT 令牌,将有效负载作为他们的电子邮件 ID,并将其作为 cookie/json 响应发送到客户端。
-
如果您希望 JWT 令牌作为响应,请使用唯一名称(例如 myAdminAccessToken(将 JWT 令牌保存在本地存储中,这样它就不会干扰浏览器中的其他密钥。响应中的cookie是一种更好,更强大的方法,然后存储JWT令牌
-
现在,每次您的用户向您的服务器发出网络请求时,在进行网络调用(获取 url(之前,请检查令牌是否存在在本地存储中,如果不存在,则他们未获得授权并将他们重定向到登录页面。 如果存在,则允许他们对您的服务器进行网络调用。
-
解析 cookie/JWT 令牌并验证电子邮件是否存在,则表示他们已获得授权发送 authorsed:true 作为响应,并让他们从您的服务器获取请求资源。
-
如果不存在此类电子邮件或 JWT 令牌解析失败,则意味着他们未获得授权,并且他们试图绕过您的第一次验证检查,即步骤 #3。
在这种情况下,从您的 服务器发送授权:错误响应,在收到失败的授权后,您的客户端应将其注销并重定向到登录页面,并从本地存储中删除accessToken。
我没有纯粹的JS或jQuery代码,但如果你愿意,我可以与你分享React代码,解释上述过程。
优化
您甚至可以优化上述解决方案,以获得更强大、更安全的应用程序。
- 使用 Redis 缓存用户电子邮件以进行快速验证。
- 使用状态管理库提供额外的保护层,并使 UI 同步。
会话存储、状态管理库对于保护路由/数据并不可靠,但它们可用于减少对服务器的网络调用数量。
- 如何为在客户端检查其密码的用户创建登录页面
- 有没有办法使用Google's Javascript客户端登录时没有弹出窗口
- Facebook使用Parse客户端站点登录,使用Express js的用户对象
- Meteor:当客户端使用 LinkedIn 登录时,首先进行身份验证时创建用户帐户
- 我可以避免将所有 js 提供给未登录的客户端吗?
- 检查用户是否已在客户端登录
- 在客户端的请求中使用以 JSON 格式传递的登录信息
- 使用SAML令牌,JSON Web服务的客户端-登录网站后
- 使用REST API和Javascript客户端,如何在页面刷新后保持登录
- 登录页面:客户端到服务器的请求被发送两次?Node.js, AngularJS, express framework
- 登录后从网站获取数据,客户端
- 我将如何处理从客户端发送登录数据到服务器与Backbone.js
- 找不到OAuth客户端.谷歌登录api
- 如何管理谷歌登录会话(谷歌登录JavaScript客户端)
- 如何获取客户端的用户名,在JS或php中登录到客户端机器
- 快速服务器与护照twitchtv可以'我的angularjs客户端无法登录工作
- 使用Node express后端为移动客户端登录Facebook
- 如何在客户端制作HTML登录页面
- 检查Facebook登录状态:客户端vs服务器端
- 最好的方式来检查用户是否登录与node.js和表达和更改客户端html