google-app-engine - 谷歌应用引擎 : SimpleAuth : Redirect Url On the Fly

标签 google-app-engine authentication redirect oauth-2.0

我在我的 GAE 应用程序中使用 Alex (https://github.com/crhym3/simpleauth) 的 SimpleAuth。我的基本模板中有一个 Jquery 支持的登录框,这意味着用户可以从应用程序内的任何 url 登录。我希望将用户重定向回他们请求登录的页面。有什么方法可以通过 Oauth2 实现这一点,或者我们可以将用户重定向回特定的 url 吗??

最佳答案

如果您使用的是 SimpleAuth,我假设您可能使用的是 webapp2,所以 @jmort253 示例并不完全符合我的要求(例如 webapp2 具有内置 session ,那么为什么还要使用另一个库来处理 session )。

不过,从概念上讲它是正确的:您需要在开始身份验证过程之前将原始 URL 存储在 session 中的某个位置。然后在成功验证后使用该存储的 URL 进行最终重定向。

从 SimpleAuth 的示例应用程序代码开始,您基本上需要更改的是 last line of _on_signin()将用户重定向到他们来自的原始 URL(而不是“/profile”)。

要存储原始请求 URL,您可以使用一个简单的包装器,例如

def simpleauth_login_required(handler_method):
    """A decorator to require that a user be logged in to access a handler.

    To use it, decorate your get() method like this:


        @simpleauth_login_required
        def get(self):
            user = self.current_user
            self.response.out.write('Hello, ' + user.name())
    """
    def check_login(self, *args, **kwargs):
        if self.request.method != 'GET':
            self.abort(400, detail='The login_required decorator '
                'can only be used for GET requests.')

        if self.logged_in:
            handler_method(self, *args, **kwargs)
        else:
            self.session['original_url'] = self.request.url
            self.redirect('/my-login-page-where-users-can-choose-auth-method')

    return check_login

现在,回到 _on_signin() 重定向行,而不是 self.redirect('/profile') 你会做这样的事情:

target = self.session['original_url']
self.redirect(target)

一些注意事项:

  • 上面的例子假设你有一个 logged_in 方法来指示当前请求是否是由一个已经通过身份验证的用户发出的;
  • 您可能希望从 session 中清除“original_url”(如果他们成功通过身份验证)

以上示例的版权归属于 webapp2_extras.appengine.users module .

关于google-app-engine - 谷歌应用引擎 : SimpleAuth : Redirect Url On the Fly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10858834/

相关文章:

java - GoogleAuthUtil.getToken Android 客户端 - Google Cloud Endpoints

java - 尝试在 Google App Engine 上使用 ReSTLets 制作登录认证页面

ios - session 过期设计模式

php - 使用 .htaccess [自定义 URL] 进行页面重定向

javascript - 如何使用 jinja 将 null 从 python 传递给 javascript

Python 部署到 Google App Engine

ruby-on-rails - 如何在用户注销后清除浏览器缓存以防止通过 'Back' 按钮访问私有(private)信息

authentication - SPA (Aurelia) + ASP.NET Core Web API + Google 身份验证

php - 从 php 重定向函数内部向下滚动到页面上的特定 div id

tomcat - 独立 Tomcat 保护免受指向其 IP 的流氓域