使用Django Oauth Toolkit获取令牌

时间:2014-01-23 00:48:00

标签: django oauth-2.0

我有疑问:

根据文档,要获得令牌,我需要这样做:

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的令牌?

感谢您的帮助。

问候。

1 个答案:

答案 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