我正在开发一个使用 Parse-Server 的应用程序,并以自己的方式进行身份验证。在不知道密码的情况下如何登录用户?
从之前的答案中,我找到了 this Parse.User.become(<token>),但无法在任何地方获取令牌。我在云代码中有这个,但它似乎token不起作用undefined。可能是因为用户中没有会话,因为用户根本没有登录(会话是可撤销的)。
function login(userId,callback) {
var query = new Parse.Query(Parse.User);
query.get(userId, {useMasterKey : true}).then(function(user){
if (user) {
console.log(user)
var token = user.getSessionToken();
console.log('Token ' + token);
if (typeof callback === "function") callback({token:token});
}
},function(error){
if (typeof callback === "function") callback({error:error});
})
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我想我迟到了,但这会对当天的某人有所帮助...这是我不需要更改密码的解决方法:
async impersonate(installationID: string, username: string): Promise<string> {
// Retreiving user
const user = await new Parse.Query<Parse.User>('_User').equalTo('username', username).first({ useMasterKey: true });
// Retreiving existing session
const session = await new Parse.Query(Parse.Session)
.equalTo('user', user)
.equalTo('installationId', installationID)
.first({useMasterKey: true});
if (session) {
// Session already exist, using it !
return session.get('sessionToken');
} else {
// Manually create session (without using Parse.Session because of it's update restrictions)
let session2 = new Parse.Object('_Session', {
'user': user,
'installationId': installationID,
'sessionToken': `r:${uuidv4()}`
});
session2 = await session2.save(undefined, {useMasterKey: true});
return session2.get('sessionToken') as string;
}}
Run Code Online (Sandbox Code Playgroud)
现在您可以使用“User.become()”和上面代码返回的令牌登录。希望能帮助到你...
| 归档时间: |
|
| 查看次数: |
1411 次 |
| 最近记录: |