使用Flask-Security进行REST API认证
我正在使用Flask-Security来构建一个有公共REST API的网页应用。我想知道怎么只通过REST调用来添加用户注册和登录功能。
创建用户其实很简单,只需要用user_datastore.create_user
就行了。但是,接下来我该怎么用REST调用来登录用户呢?
如果flask_security.utils.login_user
可以直接接受用户名和密码或者一个令牌作为参数,那就简单多了,但它却需要一个用户对象?文档里展示了如何通过表单和视图来注册和登录,但我需要能够从IOS设备上(使用RESTkit)进行注册和登录。
2 个回答
我写这个回答是因为我没有足够的权限去评论Sean Vieira提供的答案。
我看了一下Flask-Security的代码,它使用了Flask-Login的LoginManager来处理这个问题。Flask-Login又要求用户定义一个token_loader(同时在User类中实现get_auth_token)。
Flask-Security是否提供了“默认”的token_loader功能?否则,它就和Flask-Login一样了。
编辑:结果发现Flask-Security工作得很好。我不需要自己写token_loader。我把安全相关的代码放在了一个单独的文件里,这样就导致了“魔法”失效。我把安全代码放回到myapp/init.py里,结果代码就“正常”工作了。
编辑2:关于Sean上面提供的答案。我觉得这不是非此即彼的选择。必须使用auth_token_required
这个装饰器。重写User
类中的get_auth_token
是可选的,假如你想要不同的token生成方式(我觉得是这样的)。单单重写User
类中的get_auth_token
是不够的。
你可以选择使用 flask_security.decorators.auth_token_required
,同时配合 SECURITY_TOKEN_AUTHENTICATION_KEY
或者 SECURITY_TOKEN_AUTHENTICATION_HEADER
(这取决于你想把令牌放在网址里还是放在请求头里)。另外,你也可以为你的 User
类重写 flask_security.core.UserMixin.get_auth_token
,这样 Flask-Security 就会自动处理好这些事情。