До сих пор я использовал вход в Google для создания аккаунтов. Теперь я хотел бы иметь личный логин, где пользователь дает адрес электронной почты и пароль для регистрации. Поскольку уже существуют пользовательские модели, как я могу использовать введенную ими информацию для подключения к хранилищу данных и создания пользователя. Я очень запутался, как к этому подойти.
Ниже приведен лог c для регистрации пользователей:
class NoahUserRegistrationSubmit(NoahSiteHandler):
template_filename = 'registration_submit.html'
def post(self):
user_name = self.request.get('user_name')
password = self.request.get('password')
# password = self.request.form['password']
self.render_template(values={'user_name':user_name, 'password':password})
# return self.render_template(values={'user_name':user_name, 'password':password})
class NoahUserRegistration(NoahSiteHandler):
template_filename = 'noah_registration.html'
def get(self):
self.render_template()
Используемый мной вход в Google ниже:
class GoogleSigninHandler(NoahSiteHandler):
""" Google sign-in & register redirect """
#@decorator.oauth_aware
@decorator.oauth_required
def get(self):
try:
user = None
login = None
is_new_account = False
is_new_link = False
http = decorator.http()
google_user = plus_service.people().get(userId='me').execute(http=http)
logging.info("user data: %s" % google_user)
if google_user:
google_id = google_user.get('id')
displayName = google_user.get('displayName')
email = None
emails = google_user.get('emails', [])
if len(emails) > 0:
email = emails[0].get('value')
username = google_user.get('name', {}).get('givenName') or google_user.get('displayName')
if email and not username:
username = email.split('@')[0]
image_url = None
image_data = google_user.get('image')
if image_data:
is_default_image = image_data.get('isDefault', True)
if not is_default_image:
image_url = image_data.get('url')
if image_url:
image_url = image_url.replace('sz=50', 'sz=200')
if google_id:
profile_key = 'https://www.google.com/profiles/%s' % google_id
login = NoahLogin.get_by_key_name(profile_key)
if login and login.user:
user = login.user
logging.info('logging existing user in')
else:
if not login:
logging.info('creating new login with key: %s' % profile_key)
is_new_link = True
login = NoahLogin(
key_name=profile_key,
provider='Google',
email=email,
preferredUsername=username,
displayName=displayName,
photo=image_url
)
if self.session.has_key('me'):
user = NoahUser.smart_get(self.session['me'])
if user:
login.user = user
logging.info('adding google link to noahuser: %s based on session cookie' % login.user.nick)
login.put()
if not user:
#Search for legacy user based on email
logging.info('searching for legacy user with email %s', email)
#then by email
if email:
legacy_matches = NoahUser.all().filter('email =', email).fetch(1)
if len(legacy_matches) > 0:
#legacy Google user
logging.info('linking google accout to user with email: %s' % email)
login.user = legacy_matches[0]
user = login.user
if not user:
logging.info('creating new user account from google')
is_new_account = True
is_new_link = True
source = None
ua = self.request.headers['User-Agent']
if ua.find('Android') != -1:
source = 'android'
elif ua.find('Darwin') != -1:
source = 'iphone'
else:
source = 'web'
user = NoahUser(
source=source,
email=email,
nick=unique_username_from(username or displayName)
)
user.put()
login.user = user
login.put()
taskqueue.add(url='/task/avatar/fetch', params = {'login': login.key()})
if user and is_new_account:
Event.new_user(user)
user.deferred_update(source='new_account')
sync_user_with_campaign_monitor(user)
if user:
self.session['me'] = str(user.key())
self.request.registry['current_user'] = user
if is_new_account:
exit_url = self.url_for('index', new_account='1')
elif is_new_link:
exit_url = self.url_for('my_settings')
else:
exit_url = self.url_for('index')
logging.info('redirecting to: %s' % exit_url)
self.redirect(exit_url)
except client.AccessTokenRefreshError:
self.redirect(self.url_for('signin_google'))