Nano Hash - криптовалюты, майнинг, программирование

Новый пользователь с федеративным входом в систему не распознается

Я использую Google App Engine Python Federated Login, который использует OpenID, чтобы пользователи могли входить в систему с существующими учетными записями. Я хочу, чтобы пользователь был направлен на страницу, где он вводит дополнительную информацию о себе, такую ​​как имя пользователя и краткую биографию. Прямо сейчас после входа в систему пользователи направляются к этому обработчику, а затем, если у них есть имя пользователя, я хочу, чтобы они оставались на этой странице, в противном случае я хочу, чтобы они были перенаправлены в / профиль

class Tester(BlogHandler):
    def get(self):
        global visits
        logout = users.create_logout_url(self.request.uri) 

        user = users.get_current_user()
        if user:
            currentregistereduser = None
            try:
                user_db_qry = User.query(User.theid == user.federated_identity())
                user_db_list = user_db_qry.fetch(1)
                #this is the line that is causing the error
                currentregistereduser = user_db_list[0]
            except IndexError:
                #I could do something here to fix it but I am not sure what
            if currentregistereduser:
                if not currentregistereduser.username:
                    self.redirect("/profile")
                else:
                    self.render("tester.html", user=user, logout=logout)

Проблема в том, что я получаю IndexError, когда пытаюсь выполнить currentregistereduser = user_db_list[0] для нового пользователя, но он отлично работает для существующего пользователя. Кто-нибудь знает, что может быть причиной этого? Я должен сделать то же самое на моей странице /profile, чтобы идентифицировать пользователя, поэтому я не сильно помогу, просто перенаправив его туда.


Ответы:


1

Это происходит потому, что ваш запрос к хранилищу данных возвращается пустым (что ожидается в случае нового пользователя в вашей ситуации). Один из способов обойти это — проверить, существуют ли списки, и если да, обработать:

class Tester(BlogHandler):
    def get(self):
        global visits
        logout = users.create_logout_url(self.request.uri)
        user = users.get_current_user()

        if user:
            currentregistereduser = None
            user_db_qry = User.query(User.theid == user.federated_identity())
            user_db_list = user_db_qry.fetch(1)
            # Check to see if the query returned anything at all - if so, assign
            # the value to currentregistereduser; it not, it will remain None
            if user_db_list:
              currentregistereduser = user_db_list[0]

            if currentregistereduser:
                if not currentregistereduser.username:
                    self.redirect("/profile")
                else:
                    self.render("tester.html", user=user, logout=logout)

        # Assuming the code continues here...
17.10.2012
  • но пользователь должен существовать, не так ли? все это происходит сразу после того, как они впервые входят в систему со своим OpenID. что я могу с ними сделать, если они не существуют в течение определенного периода времени после регистрации? 17.10.2012
  • @clifgray Когда вы создаете нового пользователя, вы записываете его обратно в свое хранилище данных? Я могу ошибаться (у меня очень ограниченный опыт работы с OpenID), но я считаю, что вы должны явно хранить нового зарегистрированного пользователя в своем хранилище данных, чтобы делать то, что вы ищете. Кроме того, еще раз взглянув на код, вы используете User в качестве имени модели для своих пользователей? 17.10.2012
  • о боже, да, я изменил обработчик своей домашней страницы и забыл добавить пользователя в базу данных. Глупая ошибка. Спасибо за вторую пару глаз. Также да, я использую User в качестве имени модели для своих пользователей. Я полагаю, что это может быть не лучшей идеей с существующей службой пользователей. 18.10.2012
  • @clifgray Отлично, рад, что ты понял! И да, вы можете рассмотреть возможность изменения названия модели, чтобы избежать путаницы позже :) 18.10.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..