Raf*_*afa 2 python flask flask-login
我正在使用flask-login登录,以确保用户登录后才能访问某些页面。我在@login_required要保护的视图上使用,但是即使我要设置login_user(user)要设置用户的位置,也不能让我进入受保护的路由(索引)。我正在打印出my的值,user_login(user)它会返回True。我究竟做错了什么?
@app.route('/')
@app.route('/index')
@login_required
def index():
print("was in here", file=sys.stderr)
return render_template('index.html')
Run Code Online (Sandbox Code Playgroud)
这是我设定的路线 user_login(user)
@app.route('/authenticate')
def authenticate():
code = request.args.get('code')
state = request.args.get('state')
quiz_auth_response = quizlet_auth(code, state)
g.token = quiz_auth_response['token']
response = json.loads(make_request(quiz_auth_response['user_name']))
try:
user = models.User.get(models.User.username == response['username'])
login_user(user)
except models.DoesNotExist:
print("does not exist", file=sys.stderr)
user = models.User.create_user(response['username'], response['id'])
return redirect('/index')
else:
login_user(user)
print("log in user " + str(login_user(user)), file=sys.stderr)
login_user(user)
return redirect('/index')
Run Code Online (Sandbox Code Playgroud)
这是我的user_loader
@login_manager.user_loader
def load_user(userid):
try:
return models.User.get(models.User.id == userid)
except models.DoesNotExist:
return None
Run Code Online (Sandbox Code Playgroud)
这是我的用户模型
sqlite_db = SqliteDatabase('sqlite.db')
class BaseModel(Model):
class Meta:
database = sqlite_db
class User(UserMixin, BaseModel):
username = CharField(unique=True)
quizlet_id = CharField(unique=True)
joined_at = DateTimeField(default=datetime.datetime.now)
@classmethod
def create_user(cls, username, quiz_id, **kwards):
try:
cls.select().where(
(cls.username == username) | (cls.quizlet_id == quiz_id)
).get()
except cls.DoesNotExist:
print("putting user in thing", file=sys.stderr)
user = cls(username = username, quizlet_id = quiz_id)
print(user.username)
user.save()
return user
else:
raise Exception("User with that email exists already")
@staticmethod
def set_password(password):
return generate_password_hash(password.encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)
我的问题是@flask_login.login_required装饰器在装饰器之上@app.route('<path>'),所以我只需要更换它们即可
由此:
@flask_login.login_required
@app.route('/')
def index():
return render_template("index.html")
Run Code Online (Sandbox Code Playgroud)
对此:
@app.route('/')
@flask_login.login_required
def index():
return render_template("index.html")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4866 次 |
| 最近记录: |