Skip to content

Commit f5da293

Browse files
author
Thomas Chaumeny
committed
Add an index on AccessToken.token to speedup token verification
1 parent 88ae620 commit f5da293

File tree

2 files changed

+98
-1
lines changed

2 files changed

+98
-1
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# -*- coding: utf-8 -*-
2+
from south.utils import datetime_utils as datetime
3+
from south.db import db
4+
from south.v2 import SchemaMigration
5+
from django.db import models
6+
7+
8+
class Migration(SchemaMigration):
9+
10+
def forwards(self, orm):
11+
# Adding index on 'AccessToken', fields ['token']
12+
db.create_index(u'oauth2_provider_accesstoken', ['token'])
13+
14+
15+
def backwards(self, orm):
16+
# Removing index on 'AccessToken', fields ['token']
17+
db.delete_index(u'oauth2_provider_accesstoken', ['token'])
18+
19+
20+
models = {
21+
u'auth.group': {
22+
'Meta': {'object_name': 'Group'},
23+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
24+
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
25+
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
26+
},
27+
u'auth.permission': {
28+
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
29+
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
30+
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
31+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
32+
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
33+
},
34+
u'auth.user': {
35+
'Meta': {'object_name': 'User'},
36+
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
37+
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
38+
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
39+
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
40+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
41+
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
42+
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
43+
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
44+
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
45+
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
46+
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
47+
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
48+
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
49+
},
50+
u'contenttypes.contenttype': {
51+
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
52+
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
53+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
54+
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
55+
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
56+
},
57+
u'oauth2_provider.accesstoken': {
58+
'Meta': {'object_name': 'AccessToken'},
59+
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['oauth2_provider.Application']"}),
60+
'expires': ('django.db.models.fields.DateTimeField', [], {}),
61+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
62+
'scope': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
63+
'token': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
64+
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
65+
},
66+
u'oauth2_provider.application': {
67+
'Meta': {'object_name': 'Application'},
68+
'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
69+
'client_id': ('django.db.models.fields.CharField', [], {'default': 'u\'Ac*rQhSz7KIaKP1By= y=F-+zm"6Gx2J1/`5.c4e\'', 'unique': 'True', 'max_length': '100'}),
70+
'client_secret': ('django.db.models.fields.CharField', [], {'default': 'u\'^>r52h5cPi!\\\\\\\\cb$=$PcGEArkWzWKHFd.y%=|F;J/rlTtyeme<Xp}Kw?P `Fy$ f*U\\\\\\\\l5NJbHQg*O=o)qBwG3V_Y4h=.Zsi<v+N{S4UO(uPk{0t>_"fjxP@1waX\\\';<#\'', 'max_length': '255', 'blank': 'True'}),
71+
'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
72+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
73+
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
74+
'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
75+
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
76+
},
77+
u'oauth2_provider.grant': {
78+
'Meta': {'object_name': 'Grant'},
79+
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['oauth2_provider.Application']"}),
80+
'code': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
81+
'expires': ('django.db.models.fields.DateTimeField', [], {}),
82+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
83+
'redirect_uri': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
84+
'scope': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
85+
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
86+
},
87+
u'oauth2_provider.refreshtoken': {
88+
'Meta': {'object_name': 'RefreshToken'},
89+
'access_token': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "u'refresh_token'", 'unique': 'True', 'to': u"orm['oauth2_provider.AccessToken']"}),
90+
'application': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['oauth2_provider.Application']"}),
91+
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
92+
'token': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
93+
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
94+
}
95+
}
96+
97+
complete_apps = ['oauth2_provider']

‎oauth2_provider/models.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ class AccessToken(models.Model):
165165
* :attr:`scope` Allowed scopes
166166
"""
167167
user = models.ForeignKey(AUTH_USER_MODEL)
168-
token = models.CharField(max_length=255)
168+
token = models.CharField(max_length=255, db_index=True)
169169
application = models.ForeignKey(oauth2_settings.APPLICATION_MODEL)
170170
expires = models.DateTimeField()
171171
scope = models.TextField(blank=True)

0 commit comments

Comments
 (0)