Users Go API の概要

Users API をアプリケーションで使用すると、次のことができます。

  • 現在のユーザーがログイン済みかどうかを検出します。
  • ユーザーをログインさせるために、適切なログインページにリダイレクトします。
  • Google アカウントを持っていないアプリケーション ユーザーに、新規作成するよう要求します。

ユーザーがアプリケーションにログイン済みのときは、アプリケーションがユーザーのメールアドレスにアクセスできます。現在のユーザーが管理者(「管理ユーザー」と呼ばれることもあります)かどうかを検出することもでき、アプリの管理者専用領域の実装が容易になります。user パッケージの内容については、user パッケージ リファレンスをご覧ください。

Go でのユーザー認証

以下の例では、アプリケーションにログインしたユーザーに対し、パーソナライズされたメッセージとログアウト用のリンクを表示します。ユーザーがログインしていない場合は、Google アカウントのログインページへのリンクを表示します。

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
	"google.golang.org/appengine/user"
)

func welcome(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-type", "text/html; charset=utf-8")
	ctx := appengine.NewContext(r)
	u := user.Current(ctx)
	if u == nil {
		url, _ := user.LoginURL(ctx, "/")
		fmt.Fprintf(w, `<a href="%s">Sign in or register</a>`, url)
		return
	}
	url, _ := user.LogoutURL(ctx, "/")
	fmt.Fprintf(w, `Welcome, %s! (<a href="%s">sign out</a>)`, u, url)
}

app.yaml を使用した強制ログインと管理者アクセス

ページへのアクセスにユーザー ログインが必要なページがある場合は、これを app.yaml ファイルで強制することができます。

ハンドラ構成で、ユーザーをアプリケーションの登録管理者に制限することもできます。つまり、ユーザーは「閲覧者」、「編集者」、「オーナー」の基本的な役割を持つか、または、事前定義された App Engine のアプリケーション管理者役割を持つ必要があります。この機能を使用すれば、サイト内に管理者専用のセクションを容易に実装できます。別の認証メカニズムを導入する必要はありません。

URL に対する認証を構成する方法の詳細については、app.yaml リファレンスのログインまたは管理者ステータスの要求方法に関する説明をご覧ください。

Go での OAuth

標準のユーザー認証モードに加え、ユーザーは OAuth によってアプリケーションで識別できます。OAuth は、ユーザーの認証情報(ユーザー名とパスワード)を第三者と共有することなく、ユーザーが自分の代わりにウェブ アプリケーションにアクセスするための制限付きの権限を第三者に付与することを可能にするプロトコルです。クライアントから求められるやり取りなど、OAuth API の詳細については、OAuth ドキュメントをご覧ください。

OAuth を使用してユーザーを識別することと標準のユーザー認証モードには何の関連性もないことに注意してください。たとえば、login: required または login: admin が指定されているページでは、ユーザーが OAuth 経由でのみ認証されている場合は読み込みが拒否されます。

Go 要求ハンドラ内で OAuth ユーザー情報にアクセスする簡単な例を次に示します:

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
	"google.golang.org/appengine/user"
)

func welcomeOAuth(w http.ResponseWriter, r *http.Request) {
	ctx := appengine.NewContext(r)
	u, err := user.CurrentOAuth(ctx, "")
	if err != nil {
		http.Error(w, "OAuth Authorization header required", http.StatusUnauthorized)
		return
	}
	if !u.Admin {
		http.Error(w, "Admin login only", http.StatusUnauthorized)
		return
	}
	fmt.Fprintf(w, `Welcome, admin user %s!`, u)
}

認証のオプション

アプリでユーザーの認証を行うには、次のオプションのいずれかを使用します。

  • Google アカウント
  • G Suite ドメインのアカウント

認証のオプションを選択する

アプリを作成した後で、どの認証オプションを使用するかを選択できます。デフォルトでは、Google アカウントがアプリでの認証に使用されます。G Suite ドメインなどの別のオプションを選択するには、Google Cloud Platform Console でプロジェクトの [設定] ページに移動し、[編集] をクリックします。[Google 認証] プルダウン メニューで認証のタイプを選択して [保存] をクリックします。

ログインとログアウト

選択した認証オプションを使用してユーザーがアプリにログイン済みかどうかをアプリで検出できます。ユーザーがログインしていない場合は、Google アカウントでのログインまたは新しい Google アカウント作成のページに移動させることができます。ログインページの URL をアプリで取得するには、Users API のメソッドを呼び出します。アプリでは、この URL をリンクとして表示することも、URL への HTTP リダイレクトを発行することもできるので、認証を必要とするページをユーザーが訪問したときにこの機能を利用できます。

Google アカウントまたは G Suite を認証に使用するアプリケーションの場合、ユーザーがログインするときに、そのアプリケーションの名前がログインページに表示されます。表示される名前は、アプリケーションの登録時に指定されたアプリケーション名です。このアプリケーション名を変更するには、Google Cloud Platform Console の [認証情報] ページの [ユーザーに表示するサービス名] フィールドを使用します。

ログインまたは Google アカウントの作成が完了すると、ユーザーは再びアプリケーションにリダイレクトされます。アプリは、ログイン URL を生成するメソッドにリダイレクトの URL を渡します。

Users API には、アプリからログアウトするための URL を生成するメソッドがあります。このログアウト URL は、アプリに対するユーザーの認証を解除してから、元のアプリの URL にリダイレクトしますが、特に何かを表示することはありません。

ユーザーがアプリにログインした状態になるのは、アプリの画面の指示に従ってユーザーが自分のアカウントのメールアドレスとパスワードを入力した場合のみです。これは、ユーザーが自分の Google アカウントを使用して別のアプリケーションにログイン済みかどうかとは無関係です。

アカウント情報にアクセスする

ユーザーがアプリにログイン済みのときは、そのユーザーがアプリに対して要求を行うたびにアプリがアカウントのメールアドレスにアクセスできます。アプリからユーザー ID にアクセスすることもできます。これはそのユーザーを一意に識別するものであり、ユーザーが自分のアカウントのメールアドレスを変更したときでも変化しません。

アプリは現在のユーザーがアプリの管理者かどうかを特定することもできます。管理ユーザーとは、基本的な役割である「閲覧者」、「編集者」、または「オーナー」が付与されているか、事前定義された App Engine のアプリケーション管理者役割が付与されているユーザーを指します。この機能を利用すると、アプリの管理用の機能を開発できます。他のユーザーは認証不要であってもかまいません。Go、Java、PHP、Python の API を利用して、URL を「管理者専用」に簡単に構成できます。

Google アカウントと開発用サーバー

開発用サーバーでは、Google アカウントのシステムをシミュレートするためにダミーのログイン画面が使用されます。アプリケーションが Users API を呼び出してログイン画面の URL を取得するときに、API からは特別な開発用サーバー URL が返されます。この URL ではメールアドレスの入力が要求されますが、パスワードは要求されません。この画面では任意のメールアドレスを入力でき、アプリはユーザーがそのアドレスのアカウントでログインしたものとして動作します。

このダミーのログイン画面には、ダミー アカウントが管理者かどうかを指定するためのチェックボックスもあります。管理者とは、基本的な役割である「閲覧者」、「編集者」、または「オーナー」が付与されているか、事前定義された App Engine のアプリケーション管理者役割が付与されているアカウントです。このチェックボックスをオンにすると、アプリはユーザーが管理者アカウントでログインしたものとして動作します。

同様に、Users API からはダミーのログインを取り消すためのログアウト URL も返されます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Go の App Engine スタンダード環境