Google Code 提供下列語言介面: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
「應用服務引擎」應用程式可以驗證「Google 帳戶」的使用者。應用程式能夠偵測目前的使用者是不是透過「Google 帳戶」登入,還能夠將使用者重新導向「Google 帳戶」登入網頁,協助使用者登入或者建立新的帳戶。使用者登入應用程式之後,應用程式即可存取使用者的電子郵件地址。應用程式也能夠偵測目前的使用者是否為管理員,以便實作應用程式的管理員專屬區域。
「Google 帳戶」整合是「應用服務引擎」的選用功能。如果您不想整合您的應用程式和「Google 帳戶」,您隨時可以建立自己的使用者驗證系統。「Google 帳戶」提供強大、易用的驗證機制,這個機制的功能完善,且擁有數百萬個使用者。
您可以使用標準 Servlet API 搭配要求物件的 getUserPrincipal() 方法,來測試使用者是否使用「Google 帳戶」登入,並取得使用者的電子郵件位址。您可以使用 User Service API (使用者服務 API) 來產生登入和登出 URL。
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
UserService userService = UserServiceFactory.getUserService();
String thisURL = request.getRequestURI();
if (request.getUserPrincipal() != null) {
response.getWriter().println("<p>Hello, " +
request.getUserPrincipal().getName() +
"! You can <a href=\"" +
userService.createLogoutURL(thisURL) +
"\">sign out</a>.</p>");
} else {
response.getWriter().println("<p>Please <a href=\"" +
userService.createLoginURL(thisURL) +
"\">sign in</a>.</p>");
}
}
}
「使用者」服務 API 可將目前使用者的資訊,以「使用者」物件的形式傳回。「使用者」物件可在資料存放區中儲存成屬性值。
如果使用者必須登入才能存取某些網頁,則您可以在部署描述元 (web.xml 檔案) 中針對這些網頁建立安全性限制。如果使用者要存取設有安全性限制的 URL,但該使用者並未登入,則「應用服務引擎」會自動將使用者重新導向到「Google 帳戶」登入頁面,然後於使用者登入或註冊成功之後讓使用者返回該 URL。
安全性限制也可以要求使用者必須是已註冊的應用程式管理員。這會讓實作網站的管理員專區變得很容易,因為您不需要另外實作授權機制。
若要了解如何設定 URL 的安全性限制,請參閱「部署描述元:安全性和驗證」。
應用程式可以偵測使用者是不是透過「Google 帳戶」登入應用程式。如果使用者尚未登入,應用程式可以將使用者導向「Google 帳戶」進行登入或建立新的 Google 帳戶。應用程式會呼叫一種 Users API (使用者 API) 方法,以取得「Google 帳戶」登入畫面的 URL。應用程式可以顯示這個 URL 的連結,或是在使用者瀏覽的頁面需要驗證時,發出這個 URL 的重新導向。
「Google 帳戶」登入畫面會告知使用者他正在登入您的應用程式,而畫面顯示的應用程式名稱為您註冊應用程式時所選擇的名稱。如要變更應用程式名稱,請至「管理控制台」的 [Application Settings] (應用程式設定) 區段。
使用者登入或建立 Google 帳戶之後,將被重新導向您的應用程式。應用程式會將重新導向 URL 提供給產生登入 URL 的方法。
此外,「使用者 API」也包含一種產生登出 URL 的方法,可以用於登出應用程式。登出 URL 會解除使用者在應用程式的驗證,然後在不顯示任何資訊的狀況下,重新導向應用程式的 URL。
使用者如要登入應用程式,必須等候應用程式提示,然後輸入帳戶的電子郵件地址和密碼。即便使用者已經透過「Google 帳戶」登入其他應用程式,也必須遵循上述程序。
使用者登入應用程式之後,只要使用者對應用程式發出要求,應用程式即可存取這個帳戶的電子郵件地址。
應用程式還可以判斷目前的使用者是否為應用程式的管理員 (「開發人員」)。即使您不是使用「Google 帳戶」驗證其他使用者,您仍可以使用這個功能,為應用程式建立管理功能,。透過 Java 和 Python API,您可以輕易地將 URL 設為「管理員專屬」。
「應用服務引擎」資料存放區能夠將 Google Accounts API 所傳回的 User 物件儲存為特殊值類型。截至筆者撰稿時,User 值尚「無法」做為使用者的穩定識別碼:如果應用程式儲存了 User 值,使用者卻變更了電子郵件地址,則 User 值將無法繼續參照有效的使用者。實際上,使用者很少變更自己的「Google 帳戶」電子郵件地址,不過設計時仍需將這些罕見案例納入考量。往後的服務更新可能會自動更新資料存放區中的 User 值。在那之前,最好不要依賴 User 值的穩定性。
Java API 目前除了電子郵件地址之外,不會提供唯一的使用者 ID。
開發伺服器會使用虛擬登入畫面,模擬「Google 帳戶」系統。當您的應用程式為取得登入畫面的 URL 而呼叫「使用者 API」時,API 會傳回特殊的開發伺服器 URL;該 URL 會提示使用者輸入電子郵件地址,但是不必輸入密碼。您可以在提示中輸入任何電子郵件地址,應用程式將認為您已經使用該地址的帳戶登入。
虛擬登入畫面也包括一個核取方塊,可指示虛擬帳戶是否為管理員。如果選取這個核取方塊,應用程式將認為您已經使用管理員帳戶登入。
同樣地,「使用者 API」會傳回登出 URL,供您取消虛擬登入。