我想用非ORM數據源使用Django,並且在通過我的自定義後端訪問其他資源而未經任何驗證成功時,現在我需要引入用戶驗證。沒有本地數據庫。當我收到一個請求時(例如,使用用戶名和密碼創建的cURL命令),我需要對遠程URL執行HTTP基本認證,並且在成功時,我應該返回一個本地創建的用戶對象,它只有一個用戶名,沒有什麼奇特的。所以在我的Tastypie資源,我寫了這樣的事情:通過TastyPie驗證非ORM用戶資源
class dict2obj(object):
"""
Convert dictionary to object
@source http://stackoverflow.com/a/1305561/383912
"""
def __init__(self, d):
self.__dict__['d'] = d
def __getattr__(self, key):
value = self.__dict__['d'][key]
if type(value) == type({}):
return dict2obj(value)
return value
class RemoteAuth(Authentication):
def is_authenticated(self, request, **kwargs):
username = request.user.username
password = request.user.password
r = requests.get(AUTHENTICATION_URL, auth=(username, password))
if r.status_code == 200:
return True
return False
class UserResource(Resource):
username = fields.CharField(attribute='username')
class Meta:
resource_name = 'user'
authentication = RemoteAuth()
authorization = Authorization()
def obj_get_list(self, request=None, **kwargs):
result = []
posts.append(dict2obj(
{
'username': request.POST.get('username'),
}
))
return result
但是,當然,這是不行的,因爲認證對象無法獲取密碼這樣的。請建議一種處理刪除用戶身份驗證而不涉及任何本地數據庫的好方法。
成功請求登錄端點後,您是否曾嘗試將'username'和'password'存儲在'session'中?您可以通過SSL提供登錄API,使其更安全一些。 –
我不知道該怎麼做。你能指點我一些示例代碼嗎?我的印象是Tastypie資源是一個端點。我試圖訪問'http:// localost:8000/api/v1/user /?format = json' –
我將提交它作爲一個單獨的答案,因爲很難在評論中包含內聯代碼 –