Tweak authtoken

This commit is contained in:
Tom Christie 2012-10-09 09:57:31 +01:00
parent beea6487b2
commit 5c17a60176
4 changed files with 8 additions and 7 deletions

View File

@ -126,7 +126,7 @@ class TokenAuthentication(BaseAuthentication):
except self.model.DoesNotExist: except self.model.DoesNotExist:
return None return None
if token.user.is_active and not getattr(token, 'revoked', False): if token.user.is_active:
return (token.user, token) return (token.user, token)
# TODO: OAuthAuthentication # TODO: OAuthAuthentication

View File

@ -11,8 +11,7 @@ class Migration(SchemaMigration):
# Adding model 'Token' # Adding model 'Token'
db.create_table('authtoken_token', ( db.create_table('authtoken_token', (
('key', self.gf('django.db.models.fields.CharField')(max_length=40, primary_key=True)), ('key', self.gf('django.db.models.fields.CharField')(max_length=40, primary_key=True)),
('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), ('user', self.gf('django.db.models.fields.related.OneToOneField')(related_name='api_key', unique=True, to=orm['auth.User'])),
('revoked', self.gf('django.db.models.fields.BooleanField')(default=False)),
('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
)) ))
db.send_create_signal('authtoken', ['Token']) db.send_create_signal('authtoken', ['Token'])
@ -57,8 +56,7 @@ class Migration(SchemaMigration):
'Meta': {'object_name': 'Token'}, 'Meta': {'object_name': 'Token'},
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'}), 'key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'primary_key': 'True'}),
'revoked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'api_key'", 'unique': 'True', 'to': "orm['auth.User']"})
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
}, },
'contenttypes.contenttype': { 'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},

View File

@ -9,8 +9,7 @@ class Token(models.Model):
The default authorization token model. The default authorization token model.
""" """
key = models.CharField(max_length=40, primary_key=True) key = models.CharField(max_length=40, primary_key=True)
user = models.ForeignKey('auth.User') user = models.OneToOneField('auth.User', related_name='api_key')
revoked = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
@ -21,3 +20,6 @@ class Token(models.Model):
def generate_key(self): def generate_key(self):
unique = str(uuid.uuid4()) unique = str(uuid.uuid4())
return hmac.new(unique, digestmod=sha1).hexdigest() return hmac.new(unique, digestmod=sha1).hexdigest()
def __unicode__(self):
return self.key

View File

@ -149,5 +149,6 @@ class TokenAuthTests(TestCase):
def test_token_has_auto_assigned_key_if_none_provided(self): def test_token_has_auto_assigned_key_if_none_provided(self):
"""Ensure creating a token with no key will auto-assign a key""" """Ensure creating a token with no key will auto-assign a key"""
self.token.delete()
token = Token.objects.create(user=self.user) token = Token.objects.create(user=self.user)
self.assertTrue(bool(token.key)) self.assertTrue(bool(token.key))