id
вы передаете эту функцию
def load_user(id):
return User.query.get(int(id))
вызывает проблему. Похоже, что он не существует или он может содержать символы, которые arent числовые. Где-то вдоль линии user_id, кажется, теряется/изменяется и бросает ошибку.
File "/root/votr-blog/app/views.py", line 21, in load_user
return User.query.get(int(id))
ValueError: invalid literal for int() with base 10: 'None'
Если вы можете отслеживать, где id потерян, это может помочь.
Можно также обернуть вызов INT() с помощью TRY/поймать
try:
int_val = int(id)
except ValueError:
print("Failure w/ value " + id)
Глядя в колбу-GitHub и этот код
@app.route('/github-callback')
@github.authorized_handler
def authorized(oauth_token):
next_url = request.args.get('next') or url_for('index')
if oauth_token is None:
flash("Authorization failed.")
return redirect(next_url)
#this code below is getting the user by their github access token
user = User.query.filter_by(github_access_token=oauth_token).first()
if user is None:
user = User(oauth_token)
db_session.add(user)
user.github_access_token = oauth_token
db_session.commit()
return redirect(next_url)
авторизует и возвращает пользователей по отношению к их GitHub маркеров доступа, а чем user_id, это похоже на конфликт с login_manager с возвратом пользователей по id. Ваша проблема заключается в том, что оба метода пытаются сделать то же самое.
Flask-login использует user_ids для управления сеансами и пользователями в сеансе. Пользователь регистрируется и аутентифицируется, когда пользовательский идентификатор сохраняется в сеансе. Это используется для перезагрузки пользовательского объекта из идентификатора пользователя, сохраненного в сеансе.
В Github-колбе используются токены для управления пользователями. Это сохраняет токен в сеансе взглядами вещей. Эти два противоречат друг другу.
Вы могли бы сделать пару вещей:
1) Выберите тот или иной элемент управления пользователями.
2) Как только пользователь был аутентифицирован с помощью github-колбы, получите этот идентификатор пользователя и сохраните его для сеанса, так что функция load_user()
должна с чем-то работать. Это кажется противоречивым, хотя, получая пользователя с github-флягой, чтобы получить идентификатор пользователей, чтобы вы могли снова получить пользователя с помощью флэша-входа.
Этот код, кажется, является частью оригинального микроблога. Я считаю, что идентификатор относится к первичному ключу, который генерируется, когда пользователь добавляется в базу данных. В представлении модели это кажется целым числом. Я добавляю пользователя в базу данных после входа в систему, поэтому я немного смущен, почему это не возвращает ни одного после того, как они вошли в систему. https: // github.com/miguelgrinberg/microblog/blob/master/app/models.py # L24 Вот образ модели пользователя для микроблога, но мой не слишком отличается. Я могу опубликовать его, если это поможет. – CoinGame
извините, да, плохо, я смешал идентификатор с токеном. Вы можете отслеживать идентификатор пользователя - то, что передается в функцию 'load_user()' при его вызове. – Craicerjack
Я постараюсь выяснить это и скоро вернуться к вам. Спасибо. – CoinGame