故障使用瓶智威汤逊装饰(不工作)

问题描述 投票:0回答:1

有使用这个插件https://github.com/agile4you/bottle-jwt/ SOE麻烦 似乎如我所料不工作,向下跌破我的代码:

import bottle
from Py.engine import *
from bottle_jwt import (JWTProviderPlugin, jwt_auth_required)

    class AuthBackend(object):
    user = {'id': 1237832, 'username': 'pav', 'password': '123', 'data': {'sex': 'male', 'active': True}}

    def authenticate_user(self, username, password):
        """Authenticate User by username and password.

        Returns:
            A dict representing User Record or None.
        """
        if username == self.user['username'] and password == self.user['password']:
            return self.user
        return None

    def get_user(self, user_id):
        """Retrieve User By ID.

        Returns:
            A dict representing User Record or None.
        """
        if user_id == self.user['id']:
            return {k: self.user[k] for k in self.user if k != 'password'}
        return None


app = bottle.Bottle()
server_secret = 'secret'

provider_plugin = JWTProviderPlugin(
    keyword='jwt',
    auth_endpoint='/login',
    backend=AuthBackend(),
    fields=('username', 'password'),
    secret=server_secret,
    ttl=30
)

app.install(provider_plugin)

@app.route('/')
@jwt_auth_required
def index():
    return open('Html/index.html', 'r').read()


@app.post('/login')
def login():
    return open('Html/login.html', 'r').read()


@app.get('/login')
def login():
    return open('Html/login.html', 'r').read()


def run_server():
    bottle.run(app=app, host='localhost', port=8080, debug=True, reloader=True)


# Main
if __name__ == '__main__':
    run_server()

一旦运行,如果我打开浏览器127.0.0.1/8080我回来用字符串空白页“{” AuthError“:”不能访问这个资源!“]}” 至极是好的,它意味着我不能打开index.html文件(酷:@jwt_auth_required工作) 挖在源文件中我发现了一个名为validate_token()函数:

if not token:
   logger.debug("Forbidden access")
   raise JWTForbiddenError('Cannot access this resource!')

这里是例外

except JWTForbiddenError as error:
       bottle.response.content_type = b('application/json')
       bottle.response._status_line = b('403 Forbidden')
       return {"AuthError": error.args}

那么,有没有什么办法来重定向我,我的login.html页面上,如果令牌不匹配或不存在?插件提供了一些方法来做到这一点或只是一个API pckg? 谢谢你的时间 饸饹。

python login jwt bottle
1个回答
0
投票

这是智威汤逊概念并不应该如何使用。智威汤逊是宁静的。

你需要让服务器为REST API和客户端使用JS库,如AngularJs / Vue.js等,

来到关于插件的问题:

provider_plugin = JWTProviderPlugin(
    keyword='jwt',
    auth_endpoint='/login',
    backend=AuthBackend(),
    fields=('username', 'password'),
    secret=server_secret,
    ttl=30
)

auth_endpoint =“/ login”是给一个自定义的端点,其中Bottle_JWT方法寻找凭据用于验证并生成JWT授权。

我创建了一个模拟的只是建立一个响应,这是它应该如何使用。

enter image description here

一旦你通过正确的凭证,该插件与JWT响应,过期,你必须在授权的呼叫拦截,并添加作为请求头

enter image description here

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.