Задержка обновления с заявлениями «метеор» - PullRequest
0 голосов
/ 01 октября 2019

Я создал мини-приложение с пользовательским логином всегда на одной и той же странице, чтобы лучше объяснить, у меня есть главная страница с логином и регистрацией, и когда я делаю логин / регистрацию, я остаюсь на той же странице и где была форма для входапоявится панель «Добро пожаловать назад». Проблема в том, что когда я пытаюсь перезагрузить страницу с помощью F5, я на 2 секунды получаю старую форму входа, а затем появляется панель «Добро пожаловать назад». Я использовал оператор If Blaze для управления проверкой текущего пользователя, вошедшего в систему, как мы видим:

<template name="login">
    {{#if currentUser}}
    <div class=" card mb-4 shadow-sm">
        <div class="card-header">
          <h4 class="my-0 font-weight-normal">Welcome Back</h4>
        </div>
        <div class="card-body">
            TEST
        </div>
      </div>
      {{else}}
        <div id="panel-login" class=" card mb-4 shadow-sm">
                <div class="card-header">
                  <h4 class="my-0 font-weight-normal">Login Form</h4>
                </div>
                <div class="card-body">
                    <form class="login-form">
                        <div class="form-group">
                            <label for="InputEmail">Email address</label>
                            <input type="email" class="form-control" name="email" id="InputEmailLogin" aria-describedby="emailHelp" placeholder="Enter email">
                            <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
                        </div>
                        <div class="form-group">
                            <label for="InputPassword">Password</label>
                            <input type="password" name="password" class="form-control" id="InputPasswordLogin" placeholder="Password">
                        </div>
                        <button type="submit" class="btn btn-primary">Login</button>
                        <span>or <a href="#" class="register-link">Create an account</a></span>
                    </form>
                </div>
              </div>

              <div id="panel-register" class=" card mb-4 shadow-sm">
                    <div class="card-header">
                      <h4 class="my-0 font-weight-normal">Register Form</h4>
                    </div>
                    <div class="card-body">
                        <form class="register-form">
                            <div class="form-group">
                                <label for="InputEmail">Email address</label>
                                <input type="email" class="form-control" name="email" id="InputEmail" aria-describedby="emailHelp" placeholder="Enter email">
                                <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
                            </div>
                            <div class="form-group">
                                <label for="InputPassword">Password</label>
                                <input type="password" name="password" class="form-control" id="InputPassword" placeholder="Password">
                            </div>
                            <div class="form-group">
                                <label for="InputPassword">Repeat Password</label>
                                <input type="password" name="password2" class="form-control" id="InputPasswordConfirm" placeholder="Repeat Password">
                            </div>
                            <button type="submit" class="btn btn-primary">Register</button>
                            <span>or <a href="#" class="login-link">Login</a></span>
                        </form>
                    </div>
                  </div>
        {{/if}}
</template>

Это мой JS-файл, в котором я управляю всеми событиями системы входа / регистрации:

Template.login.events({
    'click .register-link': function() {
        $('#panel-login').hide();
        $('#panel-register').show().addClass("animated fadeIn");
    },
    'click .login-link': function() {
        $('#panel-register').hide();
        $('#panel-login').show().addClass("animated fadeIn");
    },
    // Registration
    'submit .register-form': function(event) {
        var email = trimInput(event.target.email.value);
        var password = trimInput(event.target.password.value);
        var password2 = trimInput(event.target.password2.value);

        if(isNotEmpty(email) && isNotEmpty(password) && isNotEmpty(password2)
            && isEmail(email) && areValidPasswords(password,password2)) {

            Accounts.createUser({
                email: email,
                password: password,
                profile: {
                    userType: 'Normal'
                }
            }, function(err) {
                if(err) {
                    sAlert.error("There was an error with the registration, try again!");
                } else {
                    sAlert.success("Account Created! You are now logged in");
                }
            });
        }

        // Prevent Submit
        return false;

    },
    // Login
    'submit .login-form': function(event) {
        var email = event.target.email.value;
        var password = event.target.password.value;

        Meteor.loginWithPassword(email, password, function(err) {
            if(err) {
                event.target.email.value = email;
                event.target.password.value = password;
                sAlert.error("There is an error with your login, try again!");
            } else {
                sAlert.success("You are now logged in!");

            }
        })

        // Prevent Submit
        return false;
    }

});

Template.login.helpers({
    ifLogged: function(user) {
        if(user != null) {
            $('#panel-login').hide();
        }
    }
});

// Trim the input
var trimInput = function(val) {
    return val.replace(/^\s*|\s*$/g, "");
};

// Check for empty fields
isNotEmpty = function(value) {
    if(value && value !== "") {
        return true;
    }
    sAlert.error('Please fill all the fields');
    return false;
};

// Validating Email
isEmail = function(value) {
    var filter = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    if(filter.test(value)) {
        return true;
    }
    sAlert.error("Invalid email, please use a valid email address");
    return false;
};

// Check passwords fields
isValidPassword = function(password) {
    if(password.length < 6) {
        sAlert.error("Password must be at least 6 characters");
        return false;
    }
    return true;
}

// Check confirmation password
areValidPasswords = function(password, confirm) {
    if(!isValidPassword(password)) {
        return false;
    }
    if(password !== confirm) {
        sAlert.error("Password do not match");
        return false;
    }
    return true;
};

Здесь есть GIF, чтобы показать вам проблему: https://i.gyazo.com/120efc183793d4d1adc5fb518e01c09c.mp4

Спасибо, если кто-то может мне помочь.

1 Ответ

0 голосов
/ 02 октября 2019

Если вы просто хотите избавиться от этого флик, вы можете реализовать загрузку на Meteor.loggingIn, как показано ниже, изменить его в соответствии с вашим вариантом использования, т.е. обернуть его в шаблон Helper и заменить этот помощник на currentUser

if (Meteor.loggingIn()) {
      return 'loading';
    } else if (Meteor.user()) {
      return 'home';
    } else {
      return 'signin';
    }
...