2014-05-03 4 views
0

J'expérimente pour développer avec google-app-engine sur la plate-forme golang et je souhaite effectuer une vérification (pour les utilisateurs connectés) sur des pages spécifiques seulement.authentification google app engine pour des pages spécifiques

par exemple:

utilisateurs qui visitent le chemin «/» seront redirigés vers «/site » s'ils sont connectés ou seront affichés une page sur le produit.

tandis que les utilisateurs visitant les pages "/ members", "/ users", "/ items" seront redirigés vers une page de connexion s'ils ne sont pas authentifiés.

un simple code de go propose:

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 
    } 
} 

mais cela se sent un peu hacky, je voudrais pouvoir tester l'URL de la page dans la fonction d'initialisation et de pré-processus, le compte utilisateur une fois au lieu d'appeler un vérificateur fonctionner à partir de n'importe où dans mon code ...

Quelle serait une bonne habitude de faire en sorte que le répartiteur http appelle mes pages "login-required" seulement si un utilisateur est connecté?

Répondre

2

La fonction init initialise uniquement votre application. Vous l'utilisez par exemple pour enregistrer des gestionnaires HTTP mais il ne fonctionnera pas à chaque requête. Si vous utilisez l'une des méthodes d'authentification standard, vous pouvez déclarer l'autorisation dans votre fichier de configuration app.yaml. Pour votre cas d'utilisation, il serait semblable à ceci:

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 

Jetez un oeil à la docs pour plus de détails.

+0

Bien! Merci. Puis-je également déclarer la page de connexion (paramètres?) Avec cette méthode? – user340495

+0

Vous pouvez définir 'auth_fail_action' à la valeur' redirect', ce qui entraîne une redirection vers la page de connexion Google. Si vous avez besoin d'un comportement différent, vous pouvez utiliser le [Service utilisateur] (https://developers.google.com/appengine/docs/go/config/appconfig?hl=de#Go_app_yaml_Requiring_login_or_administrator_status) – Sebastian