如何为Google应用创建自定义登录页面?

时间:2013-12-05 00:50:41

标签: google-app-engine google-apps

我想为google应用领域创建自定义登录页面。这是为了我所做的非盈利,所以他们在教育版上。

我查看了文档,似乎有一些解决方案但是我刚刚学习了python并且是编程Web服务的新手,我并不完全遵循文档中提到的所有内容。< / p>

查看Google应用的“用户Python API概述”Link to API,在您阅读“登录和注销”部分之前,它看起来像是我要查找的内容。它声明“如果用户未登录,该应用可以指示用户使用Google帐户登录或创建新的Google帐户”。我不会将用户重定向到默认的谷歌登录,然后再回来。我想要自定义登录页面来登录它们。

我如何完成此自定义登录页面?或者,如果可以的话,至少指出我正确的方向。

4 个答案:

答案 0 :(得分:1)

不幸的是,这在谷歌本身,AFAIK中是不可能的。开放式身份验证的一个标志是您可以识别登录页面。

如果您想要自己实施,则必须使用google's SSO service并在后端执行验证。

不幸的是,这方面没有太多的单页。 PHP here和Rails都有很好的库。我将环顾四周,看看能否找到更简洁的例子。但是,您至少需要构建一个页面,为您的服务器上传一些证书并自己处理表示层。

答案 1 :(得分:1)

我只是添加了这个问题,因为它没有接受的答案,但仍然获得了相当多的观点。根据以上所述,用于获取Google凭据的自定义登录页面需要实现单点登录身份提供程序。这是通过&#39; Configuring permissions on Google Cloud Platform&#39;中提到的Google Apps前端完成的。

有关如何完成此操作的详细信息,请参阅文档&#39; Set up Single Sign-On (SSO) for Google Apps accounts&#39;和&#39; SAML Single Sign-On (SSO) Service for Google Apps&#39;。

答案 2 :(得分:0)

您可以使用twitter-bootstrap通过编写最小标记来获取现成的表单,而无需了解css / javascript。您现在需要的只是一些python代码,用于将表单数据与您的app-engine后端集成。

以下是我为正在进行的项目开发的示例。

enter image description here

编辑于12月7日:

根据评论的讨论,我在这里是我在GAE应用程序中处理用户身份验证的示例:

class Login(BaseHandler):
    def get(self):
        template = JINJA_ENVIRONMENT.get_template('login.html')
        user=''
        if self.session.has_key('user'):
            user = self.session['user']
        failure='n'
        if self.request.environ['PATH_INFO']=='/failure':
            failure='y'
        values={'project': project,'summary':summary,'theme':self.session['theme'],'user':user,'fail':failure}
        self.response.write( template.render(values) )

    def post(self):
        #TODO: validate user
        if self.session.get('user'):
            del self.session['user']
        temail=self.request.get('loginuser').lower()
        q=ndb.gql("select password from Will where email='" + temail + "'",ancestor=get_key())
        #~ if not q:
            #~ self.redirect('/failure')
        #~ else:
        result=q.fetch(1)
        #self.response.write("select password from Will where email='" + temail + "'")
        if len(result)>0:
            if self.request.get('loginpassword') == result[0].password:
                self.session['user'] = temail #loginpassword
                self.redirect('/')
                #logging.info('User %s just logged in' % sessions['user'])
            else:
                self.redirect('/failure') #incorrect password
        else:
            self.redirect('/failure') #username does not exist

在上面的代码中,BaseHandler类是我通过派生自默认的webapp2.RequestHandler类创建的一个便利类。请参阅我的article以确切了解如何使用此方法处理会话。

在Login类中,我所做的就是处理post()请求并验证电子邮件&amp;用户刚刚使用数据存储中的信息输入的密码。 get()方法只是将用户重定向到上面屏幕截图中的登录页面。您是否可以使用此类身份验证,或者您希望用户能够实际使用他的google / gmail凭据对您的网站进行身份验证?

答案 3 :(得分:-1)

启用SSO后,可以轻松自定义登录页面。一些现成的SSO可用,如gControl,管理员可以轻松自定义登录页面。组织也在内部构建SSO,并通过它们可以获得登录页面。