كيف يمكنني تحديد user_id استنادًا إلى عنوان بريد إلكتروني في محرك التطبيق؟

StackOverflow https://stackoverflow.com/questions/816372

سؤال

يحتوي أحدث App Engine SDK (1.2.1) على مكالمة API لحساب معرف لحساب المستخدم بناءً على عنوان بريده الإلكتروني. (يظل المعرف كما هو حتى لو قام المستخدم بتغيير عنوانه لاحقًا.) انظر هذا سؤال حول معرفات المستخدم الفريدة غير المعتمة للحصول على معلومات. ومع ذلك ، لدي مشكلة في مكالمة API هذه.

user_id() يعمل للمستخدمين الذين تم تسجيل الدخول (أي من users.get_current_user), ، لكنها تعود None للكائنات التي أنشأتها users.User() مُنشئ. ** ما الذي يعطي؟

على سبيل المثال ، باستخدام الممتاز وحدة تحكم محرك التطبيق, ، هذا الرمز لا يعمل.

>>> import google.appengine.api.users
>>> me = google.appengine.api.users.get_current_user()
>>> me
users.User(email='jason.h.smith@gmail.com',_user_id='105261964646342707921')
>>> me.user_id()
'105261964646342707921'
>>> somebody = google.appengine.api.users.User('someone@gmail.com')
>>> somebody
users.User(email='someone@gmail.com')
>>>somebody.user_id()
>>> type(somebody.user_id())
<type 'NoneType'>

أريد طريقة بسيطة لتحويل عنوان بريد إلكتروني إلى معرف المستخدم. كيف يمكنني إجبار هذا المعرف من Google في وقت مبكر ؛ أو إذا لم يكن ذلك ممكنًا ، فلماذا لا؟

تحرير: هنا هو الحل الحالي.

شكرا لنيك جونسون على إجابته. هذا هو حله في العمل:

>>> from google.appengine.ext import db
>>> from google.appengine.api import users
>>> class User(db.Model):
...   user = db.UserProperty(required=True)
...
>>> def email_to_userid(address):
...   """Return a stable user_id string based on an email address, or None if
...   the address is not a valid/existing google account."""
...   u = users.User(address)
...   key = User(user=u).put()
...   obj = User.get(key)
...   return obj.user.user_id()
>>> email_to_userid('jason.h.smith@gmail.com')
u'105261964646342707921'
>>> email_to_userid('this@is-an-invalid-email-address')
>>> email_to_userid('this@is-an-invalid-email-address') is None
True
هل كانت مفيدة؟

المحلول

يتمثل الحل البديل الحالي في إنشاء كائن مستخدم ، وتخزينه إلى مخزن البيانات ، وجلبه مرة أخرى. إذا كان البريد الإلكتروني يتوافق مع حساب Google صالح ، فسيكون كائن المستخدم في الكيان الذي تم إرجاعه هو حقل user_id الخاص به.

نصائح أخرى

لجعل الحل المقترح يعمل مع NDB ، ما عليك سوى إضافة use_cache = false ، use_memcache = false to get method. هذا هو: obj = key.get(use_cache=False, use_memcache=False)يضمن هذا الحصول على الكيان من مخزن البيانات مع user_id param ملهى (فقط إذا كان هذا حساب Google صالح).

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