如何在Parse Server中无密码登录?

phu*_*win 0 parse-platform

我正在开发一个使用 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()”和上面代码返回的令牌登录。希望能帮助到你...