有使用这个插件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? 谢谢你的时间 饸饹。
这是智威汤逊概念并不应该如何使用。智威汤逊是宁静的。
你需要让服务器为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授权。
我创建了一个模拟的只是建立一个响应,这是它应该如何使用。
一旦你通过正确的凭证,该插件与JWT响应,过期,你必须在授权的呼叫拦截,并添加作为请求头
希望这可以帮助。