2010-12-13 36 views
6

Tôi chỉ tò mò về cách hoạt động của dịch vụ người dùng của công cụ ứng dụng Google. Cách tôi hiểu nó, người dùng đăng nhập vào trạng thái được lưu trữ trong cookie. Để có được cookie, người ta phải có một đối tượng yêu cầu servlet http (cho java servlet ít nhất). Nhưng api dịch vụ người dùng không yêu cầu bất kỳ yêu cầu servlet http nào làm đầu vào, vậy làm cách nào để cookie kiểm tra xem liệu người dùng có đăng nhập hay không?Dịch vụ người dùng của Google App Engine hoạt động như thế nào?

Tim

Trả lời

3

Trong khi yêu cầu, thiết lập người dùng is handled do triển khai servlet của Google.

[I] f người dùng đã đăng nhập và nhận địa chỉ email của người dùng hoặc số nhận dạng OpenID bằng API servlet tiêu chuẩn, với phương thức getUserPrincipal() của đối tượng yêu cầu.

Trong quá trình đăng nhập, dịch vụ hoạt động bằng cách sử dụng chuyển hướng, tương tự như OpenID hoặc OAuth. Hãy xem xét các URL trong suốt quá trình đăng nhập.

  1. Người dùng được chuyển hướng đến một URL, được xử lý bởi App Engine, trên ứng dụng của bạn, một cái gì đó như:

    http://app.appspot.com/_ah/login?continue=http://app.appspot.com/dosomething

  2. Việc xử lý đăng nhập chuyển hướng đến dịch vụ đăng nhập của Google, một cái gì đó như :

    https://www.google.com/accounts/ServiceLogin?service=ah&continue=http://app.appspot.com/_ah/login%3Fcontinue%3Dhttp://app.appspot.com/dosomething&ltmpl=gm&ahname=Your+App+Name&sig=hf3322hdsk98fd8fh3u29hfh24as

  3. bạn đăng nhập, sau đó Google chuyển hướng bạn ba ck để xử lý động cơ đăng nhập ứng dụng:

    http://app.appspot.com/_ah/login?continue=http://app.appspot.com/dosomething

    Khi Google chuyển hướng, một số tham số truy vấn sẽ được chuyển đến xử lý động cơ đăng nhập App, và được xây dựng trong xử lý đăng nhập sẽ thiết lập các cookie.

  4. Sau đó, bạn được chuyển hướng đến URL bạn chỉ định hoặc nơi bạn đã bắt đầu '. Một cái gì đó như:

    http://app.appspot.com/dosomething

3

gì về trong cuộc gọi tiếp theo? Ví dụ (tiếp tục từ quan điểm của bạn 4)

  1. tài khoản gọi là servlet http://app.appspot.com/dosomethingelse

Trong dosoemthingelse servlet, tôi một lần nữa có thể gọi UserService như thế này

UserService userService = UserServiceFactory.getUserService(); 
User user = userService.getCurrentUser(); 
String userId = user.getUserId(); 

Làm thế nào để dụ userService này nhận cookie để biết người dùng hiện đang đăng nhập là ai?

Các vấn đề liên quan