- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的移动混合应用程序使用expressJS服务器作为后端,通过REST API代理对parse.com的请求。我还使用 Express 与 SSO 提供商进行我自己的用户身份验证。我关注了this tutorial并对方法进行了一些修改以适合我自己的设置(不使用 CloudCode,也不使用 GitHub 进行身份验证)。我还使用了今年早些时候(2015 年 3 月?)推出的新的可撤销 session ,本质上,教程和我的身份验证方法可以归结为在远程后端(ExpressJS/CloudCode)上执行以下操作:
以用户身份登录以获取 session token
如果用户名尚不存在,则创建一个新用户,然后继续
为用户创建一个新的随 secret 码(使用masterKey更新用户密码)
使用新密码,以用户身份登录以生成 Parse sessionToken
将 sessionToken 传回客户端应用
这一切都工作正常,这似乎是使用第三方身份验证提供商登录的“方法”。
问题是每次我的用户登录时,sessionToken 本质上都会被重新创建(例如,它会销毁旧的 token 并创建一个新的 token )。我可以在 dataBrowser 中看到这一点,因为 session objectId 不同。此外,主要问题是我的用户可能已登录其他设备或网络应用程序,并且基本上每次用户切换设备时, session token 都会在其他设备上失效。然后返回该设备需要再次登录。
new enhance session博客文章提到新的可撤销 session 为每个设备提供“唯一 session ”,但是根据我的经验,这似乎不适用于从我的 Express 后端通过 REST API 登录的用户。也许这个独特的 session 仅在应用程序本身进行通信以进行解析时才有效,因此能够传递 InstallationId 来区分不同的设备。
我已经在下面发布了我的身份验证代码,解析对象来自此 npm parse library
upsertUser函数:
/**
* This function checks to see if this user has logged in before.
* If the user is found, update their password in order to 'become' them and then return
* the user's Parse session token. If not found, createNewUser
*/
exports.upsertUser = function(ssoData, deferred) {
var userCreated = (typeof deferred != "undefined") ? true : false;
var deferred = deferred || q.defer();
var query = {
where: {username: ssoData.uid.trim()}
};
// set masterKey
parse.masterKey = parseConfig.MASTER_KEY;
// find existing user by username
parse.getUsers( query, function (err, res, body, success) {
if ( body.length ) {
var userId = body[0].objectId;
var username = body[0].username;
var password = new Buffer(24);
_.times(24, function (i) {
password.set(i, _.random(0, 255));
});
password = password.toString('base64');
parse.updateUser(userId, {password: password}, function (err, res, body, success) {
if ( typeof body.updatedAt != 'undefined' ) {
console.log('user update at: ', body.updatedAt);
parse.loginUser(username, password, function (err, res, body, success) {
deferred.resolve( body.sessionToken );
});
}
});
} else if ( userCreated === false ) {
console.log('object not found, create new user');
self.createNewUser(ssoData, deferred);
} else {
deferred.resolve();
}
});
return deferred.promise;
}
创建新用户函数:
/**
* This function creates a Parse User with a random login and password, and
* Once completed, this will return upsertUser.
*/
exports.createNewUser = function(ssoData, deferred) {
// Generate a random username and password.
var password = new Buffer(24);
_.times(24, function(i) {
password.set(i, _.random(0, 255));
});
var newUser = {
username: ssoData.uid,
password: password.toString('base64'),
};
// Sign up the new User
parse.createUser(newUser, function(err, res, body, success) {
if (err) {
console.log('new parse user err', err)
}
if (typeof body.sessionToken != "undefined") {
self.upsertUser(ssoData, deferred);
} else {
deferred.resolve();
}
});
}
有什么想法可以避免后续登录时 sessionToken 失效吗?
最佳答案
天哪,我错过了设置页面上的一个切换:
Revoke existing session tokens when user changes password
就这么简单;-) 不过,我认为我不会在不同设备上获得独特的 session 。
关于javascript - 用户密码更新时解析 sessionToken 被撤销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32130972/
我目前正在使用 Oracle Database Express Edition 11g 处理一些 GRANT 选项。考虑以下小代码示例,其中一些用户向其他用户授予一些权限: -- User A GRA
我不明白这两个查询之间的区别, 1.修改用户用户名账户锁定;2.REVOKE CREATE SESSION FROM 用户名; 这些查询将如何影响用户? 如果我使用撤销 session ,那么可以进行
我正在尝试撤销以下 Google token API ("Content-type:application/x-www-form-urlencoded",请求类型 POST,https://accou
我不明白这两个查询之间的区别, 1.改变用户用户名账户锁;2.REVOKE CREATE SESSION FROM用户名; 这些查询将如何影响用户? 如果我使用 revoke session 那么可以
在服务器上使用 python 访问 firestore 管理员: import firebase_admin from firebase_admin import credentials, fires
MariaDB 中是否可以撤销用户的权限并同时撤销他授予的用户的权限?到目前为止我已经尝试过类似的事情 REVOKE SELECT ON mysql.sometable FROM 'user'@'%'
如果我使用普通用户帐户创建表: create table test (a text, b text, c text); 同一用户可以对表执行所有操作... john=# \z test
在 PostgreSQL 中,当 super 用户授予任何权限时(例如 GRANT SELECT ON TABLE table_name),只有 super 用户可以撤销它们。 有没有其他 super
我试过使用文档 here但似乎没有帮助。如果可以请给我一个例子。 revoke select (column1, column2) on table from specific_user 没用。 Ac
有没有一种方法可以撤销用户对目录对象(即 information_schema)和 PostgreSQL 表(即 pg_catalog)的权限?我已经尝试了几件事并搜索了网络。我没有任何运气。我读到的
在我的应用程序中,我使用的是 APNS。我已经制作了证书,但我对使用感到困惑。我收到以下错误。 Warning: stream_socket_client(): SSL operation faile
[我检查过类似的帖子,我的问题与其他人的问题略有不同,因为我们有多个应用程序在一个证书下签名] 我们受委托(delegate)为客户开发现有的 iOS 应用程序,现在需要使用他们的证书将其分发到应用程
我的 APNs 证书即将到期,所以我撤销了 APNs 证书(只是为了确保一切正常)。但是 30 分钟后我仍然收到测试推送通知。是因为苹果的缓存吗?会持续多久? 最佳答案 根据您的问题,您的旧证书尚未过
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关于您编写的代码问题的问题必须在问题本身中描述具体问题 — 并且包括有效代码 以重现它。参见 SSC
是否可以在 C# 中执行类似的操作? logger != null ? logger.Log(消息) : ;//如果为 null 则什么都不做 或 记录器!?? logger.Log(消息);//只有
我不小心执行了以下命令: git rm -r . 毫不奇怪,它删除了所有内容。有什么办法可以恢复吗? 最佳答案 尝试: git reset HEAD 如果您没有任何您关心的未提交的更改,那么 git
我们有一个已授予某些权限的应用程序。然后用户从设置 -> 应用程序 -> 权限撤销权限。我提到该应用此时处于后台。 有时,应用会在上述流程发生时崩溃。有什么办法可以解决这个问题吗?我们可以知道何时从应
如何使用 AnkhSvn/VS 2010 撤消/恢复我已提交的更改。 (我很清楚您不能“删除”subversion 存储库中的内容)。 问题很简单, 您正在处理 HEAD(例如 rev 100)。你发
我想知道是否可以撤销 ThinkTecture Identity Server 颁发的 OAuth 2.0 token ,因为我想让我的应用程序注销。 最佳答案 这仅适用于实现 RFC 7009 的
我有一个 grails 应用程序,我希望用户授予我访问他/她的 LinkedIn 帐户的权限,以获取信息并以不同的方式显示它。 我能够做到以下几点: 获取授权码 使用该授权码获取访问 token 我将
我是一名优秀的程序员,十分优秀!