Python @在flask应用程序中登录时遇到问题
我已经创建了一个处理身份验证的蓝图。这个蓝图使用Flask登录。并具有以下内容,以及更多未显示的代码 在蓝图中,我有以下内容:Python @在flask应用程序中登录时遇到问题,python,flask,flask-login,login-required,Python,Flask,Flask Login,Login Required,我已经创建了一个处理身份验证的蓝图。这个蓝图使用Flask登录。并具有以下内容,以及更多未显示的代码 在蓝图中,我有以下内容: from flask.ext.login import LoginManager from flask.ext.login import UserMixin from flask.ext.login import current_user from flask.ext.login import login_required from flask.ext.login im
from flask.ext.login import LoginManager
from flask.ext.login import UserMixin
from flask.ext.login import current_user
from flask.ext.login import login_required
from flask.ext.login import login_user
from flask.ext.login import logout_user
auth_print = Blueprint('auth_print', __name__)
login_manager = LoginManager()
login_manager.login_view = '/login'
class User(UserMixin):
user_store = {} # Stores the users that are already logged in.
def __init__(self, user_id):
self.user_store[user_id] = self # add the user to the user_store
self.username = user_id # the user_id is in fact the username
self.id = unicode(user_id)
def sign_out(self):
logout_user()
try:
del self.user_store[self.id]
except KeyError:
pass
@classmethod
def get(cls, user_id):
return cls.user_store.get(user_id)
@login_manager.user_loader
def load_user(user_id):
return User.get(user_id)
def get_current_user():
return current_user
@login_required
@auth_print.route('/')
def user():
return "Welcome, and thanks for logging in."
然后我有一个小应用程序,我想添加身份验证
小型应用程序
import the_above_module
app.register_blueprint(the_above_module.auth_print) # register the blueprint
@the_above_module.login_required
@app.route('/profile')
def protected():
name = the_above_module.get_current_user().username
return "Thank you for logging in."
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
现在我知道blueprint的@login_required正在工作,因为如果我打开浏览器并转到localhost:8000/我必须登录
但是,如果我转到localhost:8000/profile,则不会触发登录所需的装饰程序。因此,我得到一个错误,因为没有当前用户
为什么@login\u required会在蓝图中工作,而不是在应用程序中工作,即使我确定要保留相同的名称空间?您必须更改装饰程序的顺序。引述: 那你现在怎么用那个装饰器呢?将其作为最内层应用 视图函数的装饰器。当应用进一步的装饰时,始终 请记住,route()装饰器是最外层的:
@app.route('/secret_page')
@login_required
def secret_page():
pass
当我们希望用户不要访问私有页面或需要登录的页面时,flask提供了decorators
@app.route(“/welcome”)
@需要登录#如果用户未登录,则会重定向到未经授权的#处理程序
def welcome_page():
返回“欢迎用户”
@login_manager.unauthorized_handler#在unauthorized_handler中,我们有一个回调URL
def unauthorized_callback():#在回拨url中,我们可以指定要回拨的位置
return redirect(url_代表('login'))#在我的例子中,它是登录页面!
我希望你的问题得到解决 请解释你的答案为什么/如何解决这个问题。
@login_manager.unauthorized_handler
def unauthorized_callback():
return redirect(url_for('website.index'))