Регистрация с подтверждением по электронной почте не создает токен сеанса, когда пользователь перенаправляется в веб-приложение после нажатия на ссылку подтверждения - PullRequest
0 голосов
/ 08 ноября 2019

Согласно руководству Parse js:

Parse.User, полученный из Parse.User.current(), всегда будет аутентифицирован. Если вам нужно проверить, аутентифицирован ли Parse.User, вы можете вызвать метод authenticated. Вам не нужно проверять аутентифицированные с помощью Parse.User объекты, полученные с помощью аутентифицированного метода.

Так что, когда пользователь регистрируется в моем веб-приложении, вы получаете подтверждающее электронное письмо, которое после нажатия направитпользователь вернулся в приложение. Затем я вызываю Parse.User.current(), который возвращает объект пользователя, но sessionToken пуст. Пользовательский объект выглядит следующим образом:

ACL: {*: {…}, vIl61voP42: {…}}
createdAt: "2019-11-08T11:47:44.102Z"
emailVerified: true
objectId: "vIl61voP42"
origin: "Web App"
sessionToken: undefined
updatedAt: "2019-11-08T11:50:19.633Z"
username: "dfgg@dfgg.com"

Моя цель - дать пользователю доступ к приложению без необходимости входа в систему вручную и создания сеанса. Из документов Parse я понял, что, как только мы получим пользователя, вернувшегося с Parse.User.current(), это будет означать, что этот пользователь войдет в систему, и поэтому я смог установить и сохранить новые данные в объекте пользователя, что не так ...

Для регистрации у меня есть стандартная регистрация Parse согласно документации:

var user = new Parse.User();
user.set("username", "my name");
user.set("password", "my pass");
user.set("email", "email@example.com");

try {
  await user.signUp();
  // Hooray! Let them use the app now.
} catch (error) {
  // Show the error message somewhere and let the user try again.
  alert("Error: " + error.code + " " + error.message);
}

После того, как форма регистрации отправлена, пользователь получает ссылку для подтверждения по электронной почте, которая перенаправляет их в мое приложение url,Вот как выглядят настройки моего сервера Parse:

const api = new ParseServer ({
  ...

  verifyUserEmails: true,
  emailVerifyTokenValidityDuration: 0,
  preventLoginWithUnverifiedEmail: true,
  customPages: {
    // App
    passwordResetSuccess: settings["appUrl"] + "/login",
    verifyEmailSuccess: settings["appUrl"] + "/dashboard",
    linkSendSuccess: settings["appUrl"] + "/email-confirmation",
    // Parse
    invalidLink: settings["serverUrl"] + "/expired",
    choosePassword: settings["serverUrl"] + "/choose_password"
  }

  ...
})

Наконец, когда пользователь прибывает на мой dashboard маршрут по ссылке для подтверждения электронной почты, я получаю текущего пользователя через await Parse.User.current(), который возвращает мне пользователяобъект без токена сеанса. Также проверено на моей локальной базе данных разработчика, и сессия не создается.

Есть идеи?

...