سؤال

أحاول استخدام Django-Socialauth (http://github.com/uswaretech/django-socialauth) لمصادقة المستخدمين لمشروع Django الخاص بي.

هذا هو الوقت المناسب في العمل مع OpenID واضطررت إلى معرفة كيفية عمل هذا المعرف المفتوح بالضبط. لقد فهمت ذلك إلى حد ما ، الآن ، ولكن هناك بعض الأشياء التي تثيرني.

تبدأ عملية المصادقة عندما يتم وضع الطلب معًا في Django-socialauth.openid_consumer.views.begin. أستطيع أن أرى أن طلب المصادقة الصادر هو شيء مثل هذا:

https://www.google.com/accounts/o8/ud?openid.assoc_handle=AOQobUckRThPUj3K1byG280Aze-dnfc9Iu6AEYaBwvHE11G0zy8kY8GZ&
openid.ax.if_available=fname&
openid.ax.mode=fetch_request&
openid.ax.required=email&
openid.ax.type.email=http://axschema.org/contact/email&
openid.ax.type.fname=http://example.com/schema/fullname&
openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select&
openid.identity=http://specs.openid.net/auth/2.0/identifier_select&
openid.mode=checkid_setup&openid.ns=http://specs.openid.net/auth/2.0&
openid.ns.ax=http://openid.net/srv/ax/1.0&
openid.ns.sreg=http://openid.net/extensions/sreg/1.1&
openid.realm=http://localhost/&
openid.return_to=http://localhost/social/gmail_login/complete/?janrain_nonce=2010-03-20T11%3A19%3A44ZPZCjNc&openid.sreg.optional=postcode,country,nickname,email

هذا يشبه المثال الثاني هنا:http://code.google.com/apis/accounts/docs/openid.html#samples

المشكلة هي ، أن الطلب ، أعود ، ليس مثل المثال المقابل من code.google.com (انظر إلى المثال الثالث في الإجابات على سبيل المثال. استجابة تلقيها مثل هذا:

{
'openid.op_endpoint': 'https://www.google.com/accounts/o8/ud', 
'openid.sig': 'QWMa4x4ruMUvSCfLwKV6CZRuo0E=', 
'openid.ext1.type.email': 'http://axschema.org/contact/email', 
'openid.return_to': 'http://localhost/social/gmail_login/complete/?janrain_nonce=2010-03-20T17%3A54%3A06ZHV4cqh', 
'janrain_nonce': '2010-03-20T17:54:06ZHV4cqh', 
'openid.response_nonce': '2010-03-20T17:54:06ZdC5mMu9M_6O4pw', 
'openid.claimed_id': 'https://www.google.com/accounts/o8/id?id=AItOghawkFz0aNzk91vaQWhD-DxRJo6sS09RwM3SE', 
'openid.mode': 'id_res', 
'openid.ns.ext1': 'http://openid.net/srv/ax/1.0', 
'openid.signed': 'op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle,ns.ext1,ext1.mode,ext1.type.email,ext1.value.email', 
'openid.ext1.value.email': 'my.emailaddress@gmail.com', 
'openid.assoc_handle': 'AOQobUfssTJ2IxRlxrIvU4Xg8HHQKKTEuqwGxvwwuPR5rNvag0elGlYL',
'openid.ns': 'http://specs.openid.net/auth/2.0', 
'openid.identity': 'https://www.google.com/accounts/o8/id?id=AItOawkghgfhf1FkvaQWhD-DxRJo6sS09RwMKjASE', 
'openid.ext1.mode': 'fetch_response'}

تم تصميم Socialauth نفسها لقبول عنوان بريدي الإلكتروني بهذه الطريقة:

    elif request.openid and request.openid.ax:
        email = request.openid.ax.get('email')

ومن الواضح أن هذا يفشل.

لماذا أسأل كل هذا ، ربما أفعل شيئًا خاطئًا وطلبي الصادر خاطئ؟ أو هل أفعل كل شيء بشكل صحيح ويجب أن أغير وحدة Socialaouth لقبول المعلومات بطريقة جديدة ثم ارتكاب التغيير؟

آلان

هل كانت مفيدة؟

المحلول

حاول استخدام السمة الكاملة URI في الخاص بك ax.get, ، بمعنى آخر ax.get('http://axschema.org/contact/email')

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top