Flask-Login使用POST请求登录服务

问题描述

我正在尝试构建一个Flask Web应用程序,该应用程序将用户连接到需要用户登录的服务,但是我无法中继登录

服务的身份验证通过以下方式工作(非常不正常):

  • 您使用 userid 登录密码
  • 进行身份验证
  • 这将返回带有令牌
  • 的JSON
  • 通过身份验证后,您可以通过提供您的 userid 和收到的令牌
  • 获取数据

这是我的用户类别:

class User(UserMixin):
    def __init__(self,userid):
        self.userid = userid
        self.token = None


    def get_id(self):
        return self.userid


    def login(self,loginname,password):
        # Request
        data = {'userid' : self.userid,'loginname' : loginname,'password' : password}
        r = requests.post('https://myurl.com/authenticate',data=data)
        
        # If Failure
        if r.status_code != 200:
            flash('Unsuccessful Login!','danger')
            return False

        # Extracting the Token
        self.token = r.json()['token']

        # Success
        flash('You have successfully logged in!','success')
        return True

这是登录页面的路由,该页面使用下面定义的WTForm。

@app.route("/login",methods=['GET','POST'])
def login():
    form = LoginForm()

    if form.validate_on_submit():
        user = User(form.userid.data)
        if user.login(form.loginname.data,form.password.data):
            login_user(user)
            return redirect(url_for('home'))

    return render_template('login.html',title='Login',form=form)

class LoginForm(FlaskForm):
    userid = StringField('User ID',validators=[Datarequired()])
    loginname = StringField('Loginname',validators=[Datarequired()])
    password = PasswordField('Password',validators=[Datarequired()])
    submit = SubmitField('Login')

我相信我必须使用request_loader,但是单击登录按钮时,授权标头和args均为空。

@login_manager.request_loader
def load_user_from_request(request):
    print('AUTH',request.headers.get('Authorization')) # -> None
    print('ARGS',request.args) # -> ImmutableMultiDict([])

在这种情况下,request_loader应该如何访问用户ID 登录密码

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)