我有疑问:
根据文档,要获得令牌,我需要这样做:
curl -X POST -d "grant_type=password&username=<user_name>&password=<password>&scope=read" http://<client_id>:<client_secret>@localhost:8000/o/token
在我的系统中,我有两种登录方式,一种是django的auth用户,另一种是facebook。一个auth用户一切正常,但有了facebook我将用户的凭据存储在另一个表中,而不是在auth用户中。因此,当我尝试拥有令牌时,我无法成功,因为我没有auth
django
oauth
用户的用户名和密码POST
工具包迫使我将其用于username & password
。
我怎样才能让它有机会获得一个令牌,{{1}}以及用户脸书和facebook的令牌?
感谢您的帮助。
问候。
答案 0 :(得分:1)
您可以通过编写自己的OAuth2Validator类来覆盖DOT的默认行为并对用户进行身份验证,例如:
from oauth2_provider.oauth2_validators import OAuth2Validator
class MyOAuth2Validator(OAuth2Validator):
def validate_user(self, username, password, client, request, *args, **kwargs):
"""
Check username and password correspond to a valid and active User, if fails
try Facebook token authentication
"""
u = authenticate(username=username, password=password)
if u is None or not u.is_active:
u = authenticate_with_facebook()
if u is not none and u.is_active:
request.user = u
return True
return False
然后你必须告诉DOT使用你的类,而不是默认的一个在你的设置中放置这样的东西:
OAUTH2_PROVIDER = {
# other DOT settings
'OAUTH2_VALIDATOR_CLASS': 'your_app_name.MyOAuth2Validator',
}
HTH