질문에 언급 된 튜토리얼과는 별도로 google.appengine.api 사용자 모듈을 통해 Google 사용자를 인증하는 방법을 보여줍니다. 모든 것은 JavaScript없이 할 수 있지만 게시 후 JS로 확인하도록 암호화 된 쿠키를 설정하여 사용자 ID를 얻는 것과 같은 웹 사이트 고유의 기능을 수행 할 수 있습니다 (문제가 있다면 알려주세요.)).
이 답변은 Python2 및 표준 환경에서 실행되는 Google App Engine 애플리케이션에 적용됩니다. 이 응용 프로그램은 또한 jinja2 템플릿을 사용합니다.
나는 구글 계정이있는 사용자를 인증 여기를 사용할 수있는 방명록 응용 프로그램을 다음입니다 :는 HTML의 경우
App Engine Guestbook - authenticating users
: 설정
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="https://apis.google.com/js/platform.js" async defer></script>
<meta name="google-signin-client_id" content="MY_CLIENT_ID.apps.googleusercontent.com">
</head>
<body>
<!-- Login Link -->
<!-- <div class="g-signin2" data-onsuccess="onSignIn"></div> -->
<a href="{{ g_url | safe}}">{{ g_url_txt }}</a>
</body>
</html>
파이썬 백엔드 (main.py) :
import webapp2
# Templating
import jinja2
# Authenticating users with google's users API
from google.appengine.api import users
# GAP's db model (only shown to see how user is checked if a returning user)
from google.appengine.ext import db
# For the templating to work you'll need to set up a
# jinja environment linked to your own template directory, for example:
jinja_env = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
extensions=['jinja2.ext.autoescape'],
autoescape=True)
핸들러 (m ain.py) :
class Handler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
def render_str(self, template, **params):
template = jinja_env.get_template(template)
return template.render(params) # parameters can also be a dictionary!
def render(self, template, **kw):
self.write(self.render_str(template, **kw))
class Login(Handler):
def get(self):
# If user chooses Google Sign-in
user = users.get_current_user() # Returns google user if signed-in
if user: # If google user exists...
nickname = user.nickname()
guser_id = user.user_id() # This is unique, email address may change.
email = user.email()
# Check if google user exists in database:
u = User.by_google_id(guser_id)
if u:
# Do something to give rights to user on your website
# e.g. via encrypted cookie.
else:
u = User(guser_id = guser_id,
email = email,
username = nickname)
u.put()
self.redirect("/welcome")
else: # Otherwise render the google href that will direct the user to the sign-in process.
g_url = users.create_login_url(self.request.uri)
g_url_txt = 'Login with Google'
self.render("login.html", g_url=g_url, g_url_txt=g_url_txt)
# After the user click on the link provided, sign-in will proceed, with succes, the
# redirect back here, with "self.request.uri" and the get() will run again,
# but this time with a google user.
class Welcome(Blog):
def get(self):
g_url = users.create_logout_url("/") # Will redirect to Login page if clicked on.
g_url_txt = 'Logout'
self.render('welcome.html', g_url=g_url, g_url_txt=g_url_txt)
class User(db.Model):
email = db.StringProperty(required = True)
guser_id = db.StringProperty(required = False) # googleUser
nickname = db.StringProperty(required = False) # googleUser
# @decorator:
# means that you can call the
# object's method without instantiating the object
@classmethod
def by_id(cls, uid):
# 'cls' refers to the User class
return cls.get_by_id(uid, parent = users_key())
@classmethod
def by_google_id(cls, gid):
# 'cls' refers to the User class
return cls.all().filter('guser_id =', gid).get()
app = webapp2.WSGIApplication([('/', Login),
('/welcome', Welcome)
],
debug = True)
나는 이것이 당신이나 다른 사람에게 도움이되기를 바랍니다, 나는 아직 사용할 수없는 솔루션이나 튜토리얼 위에서 실제로 사용되지 않습니다 여부에 대한 명확한 설명과이를 일 동안 갇혀 있었다.
이전과 비슷한 문제가 있습니다. 지침에 콘솔 사이드 바에서 자격 증명을 선택하라는 메시지가 표시되지만 거기에 없습니다. 편집 : 신경 쓰지 마라. 로그인이 권장되지 않습니다. –