Есть ли способ входа пользователя из другой формы, отличной от формы безопасности входа - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть страница входа, настроенная с помощью безопасности фляги, после того как пользователь войдет в нее, она перенаправит на страницу администратора, теперь я хочу создать еще одну страницу входа для конечного пользователя (клиенты).

Я создал форму, котораяотправить электронную почту и пароль в колбу.Затем проверьте, есть ли в базе данных адрес электронной почты и пароль, затем login_user (пользователь).jquery предполагает загрузку другой страницы с текущим идентификатором пользователя, но возвращает None.

Login.py

@login.route('/userLogin/log',  methods=['GET','POST'])
def Login():
     data = request.get_json()
     email = data["email"]
     passw = data["password"]



     user = UsersModel.query.filter_by(email=email).first()
     if user:
          if verify_password(user.password, passw):

              login_user(user)
              return  jsonify({'message':"done"})
     else: 
          return  jsonify({'message':gettext('Email and Password do not exist')}),422
          return render_template('front/cart.html')

@login.route('/homepage')
def homepage():
     id = "Hello" + str(current_user.get_id())
     return id

init .py

     app.config['SQLALCHEMY_DATABASE_URI'] ='mysql://root:@127.0.0.1/docwhere'
     app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
     #app.config['JWT_AUTH_USERNAME_KEY']='phoneNo'
     #app.config['WTF_CSRF_CHECK_DEFAULT']=False
     app.config['SECURITY_REGISTERABLE'] = False
     app.config['SECURITY_PASSWORD_SALT']='rreer##@'
     app.config['CKEDITOR_FILE_UPLOADER'] = '/admin/upload/'
     app.config['CKEDITOR_FILE_BROWSER']='/fm/index.html'
     app.config['UPLOADED_FILES_DEST'] = '/static/uploads'
     app.secret_key = 'EiEiO##$'
     app.config['FLASKFILEMANAGER_FILE_PATH'] = '/static/uploads'
     app.config['BABEL_DEFAULT_LOCALE']='en'
     app.path = '/static/uploads/'
     app.database_path = '/static/uploads/'
     db.init_app(app)
     class JSONEncoder(BaseEncoder):
          def default(self, o):
                if isinstance(o, _LazyString):
                     return text_type(o)

    return BaseEncoder.default(self, o)

 app.json_encoder = JSONEncoder
 babel = Babel(app)
 csrf = CSRFProtect(app)
 ckeditor = CKEditor(app)

 login_manager = LoginManager()
 login_manager.init_app(app)

 security = Security(app, user_datastore)

Обновление: кнопка отправки Jquery

  $('#login').click(function(e){
  e.preventDefault();
  url = "/userLogin/log "
  var csrf_token = "%% csrf_token() %%";
   var ob = {"email": $("#login-user").val(),
      "password": $('#login-pass').val()
    };      
  console.log(ob);
   $.ajax({
              url: url,
              type: 'post',
              headers: {
                  "Content-Type": "application/json",
                  "X-CSRFToken": csrf_token,
              },
              traditional: true,
              data: JSON.stringify(ob),

              success: function (message) {

                window.location.replace("%%  

           url_for('login.homepage')%%%%process_query_string(request)%%");

                },
        error: function (err) {

            error = "";
            $(".btn").removeAttr("disabled");
            for (key in err.responseJSON) {
                error +=  key + ":" + err.responseJSON[key] + "<br>";
            }
            if (error)
                $("#error").html("<p>" + error + "</p>");
            else
                $("#error").html("<p>" + err.responseText + "</p>");
            $("#error").show();
        }


     });
    return false;
     });

1 Ответ

0 голосов
/ 22 сентября 2019

То, что вы пытаетесь сделать, прекрасно.Недостаточно информации для отладки, чтобы понять, где может быть проблема.Возможно, вас остановили во время CSRF (обычно я запускаю без CSRF, чтобы убедиться, что все остальное работает).В вашем фрагменте кода - вы используете аутентификацию сеанса Flask (неявно).Вы не показываете свой код, где вы устанавливаете SECRET_KEY, который требуется для того, чтобы Flask генерировал сеансовые куки.Я бы начал с использования отладчика браузера и посмотрел бы на возвращение из вашего / userLogin / log и убедился, что он успешен и возвращает сессионный cookie.Также - убедитесь, что при последующем вызове AJAX - убедитесь, что куки отправляются.Обратите внимание, что только то, что вы получили файл cookie сеанса - не означает, что вы вошли в систему - поэтому, чтобы помочь это проверить, - добавьте @login_required к вашей конечной точке, которая ссылается на current_user.

...