针对特定网页的Google App引擎身份验证

时间:2014-05-03 14:37:27

标签: google-app-engine go

我正在尝试在golang平台上使用google-app-engine进行开发,我希望仅对特定页面执行检查(对于已登录的用户)。

例如:

访问“/”路径的用户如果已登录,将被重定向到“/ site”,或者会显示有关该产品的页面。

访问“/ members”,“/ users”,“/ items”页面的用户如果未经过身份验证,将被重定向到登录页面。

一个简单的代码建议:

package hello

import (
    "fmt"
    "net/http"

    "appengine"
    "appengine/user"
)

func init() {
    http.HandleFunc("/", site)
    http.HandleFunc("/", members) // etc for "items" and "products" and whatever restricted pages
}

func user_logged_in() bool {
    // do the check ...
    return true
}

func user_not_logged_in() {
    // fatal error message
}

func site(w http.ResponseWriter, r *http.Request) {
    if !user_logged_in() {
        // show "about" page
    } else {
        // show a "user" page
    }
}

func members(w http.ResponseWriter, r *http.Request) {
    if !user_logged_in() {
        // show "members" page
    } else {
        user_not_logged_in() // fatal error message
    }
}

然而这感觉有点hacky,我希望我可以测试init函数中的页面URL并预处理用户帐户一次,而不是从我的代码中的任何地方调用checker函数...

只有在用户登录后才能使http调度程序调用我的“登录所需”页面?

1 个答案:

答案 0 :(得分:2)

init函数仅初始化您的应用程序。例如,您可以使用它来注册HTTP处理程序,但它不会在每个请求上运行。

如果您使用其中一种标准身份验证方法,则可以在app.yaml配置文件中声明授权。对于您的用例,它将类似于:

handlers:

- url: /members/.*
  script: _go_app
  login: required

- url: /users/.*
  script: _go_app
  login: required

- url: /items/.*
  script: _go_app
  login: required

- url: /.*
  script: _go_app

有关详细信息,请查看docs

相关问题