2012-06-18 46 views
11

Đối với một dự án, tôi sẽ tạo ra một ứng dụng trên Google App Engine nơi:Tạo tài khoản người dùng trong Google App Engine

  • nhà lãnh đạo thảo luận có thể đăng ký với địa chỉ e-mail của họ (hoặc tài khoản OpenID hoặc Google) trên trang web để sử dụng nó. Trong trang quản trị ứng dụng, họ có thể tạo cuộc thảo luận nhóm để họ có thể thêm người dùng dựa trên địa chỉ e-mail của họ
  • và sau đó người dùng này sẽ nhận được chi tiết tài khoản được tạo (nếu họ chưa có tài khoản) họ có thể đăng nhập vào cuộc thảo luận nhóm đó với tài khoản mới được tạo của họ.

Tôi không muốn yêu cầu các nhà lãnh đạo thảo luận có Tài khoản Google hoặc tài khoản OpenID để đăng ký ứng dụng và tất cả tài khoản người dùng khác phải được tạo bởi người đứng đầu thảo luận.

Tuy nhiên, Google App Engine dường như chỉ hỗ trợ tài khoản Google và tài khoản OpenID. Làm thế nào tôi sẽ đi về điều này? Có mô hình hiện tại để tạo tài khoản nhà lãnh đạo và tạo tài khoản người dùng từ bên trong Google App Engine vẫn hỗ trợ API người dùng GAE không?

Trả lời

4

GAE User API chỉ ở đó để cung cấp cho bạn người dùng hiện đã đăng nhập và một số thuộc tính của anh ấy. Tuy nhiên, bạn sẽ phải lưu trữ thông tin này trong kho dữ liệu, giả sử mô hình User.

Từ đó bạn có thể làm bất cứ điều gì bạn muốn với logic kinh doanh của bạn, và làm thế nào bạn đang đi để lưu trữ/tạo người dùng dựa trên các email và phải làm gì với những người sử dụng, làm thế nào để nhóm chúng vv

Để hỗ trợ đăng nhập OAuth, như Facebook hoặc Twitter, bạn sẽ phải đi với API của riêng họ về cách xác thực người dùng từ các dịch vụ này (đăng ký khóa, yêu cầu quyền, v.v.). May mắn cho bạn có rất nhiều khung công tác bao gồm vấn đề này, nhưng nó phụ thuộc vào cấu trúc của bạn và những gì bạn đang sử dụng.

(Disclaimer nó là của tôi) Vì bạn chỉ là việc tạo ra một ứng dụng mới, bạn có thể có một cái nhìn về dự án gae-init, mà về cơ bản là một điểm khởi đầu cho các ứng dụng mới của bạn có đã Google, FacebookTwitter đăng nhập và lưu trữ chúng trong kho dữ liệu, nơi chúng có thể thay đổi các thuộc tính của chúng. Bạn sẽ phải quen thuộc với GAE.

8

EngineAuth

Một vài tháng trước, tôi đã phát triển một gói python gọi EngineAuth. Nó sử dụng phần mềm trung gian để chặn yêu cầu nhằm xác thực.

Dưới đây là một ứng dụng ví dụ:

http://engineauth.scotchmedia.com/

Và nguồn:

https://github.com/scotch/engineauth

EngineAuth có chiến lược xác thực khác nhau. Một trong số đó là mật khẩu.

Password lấy mật khẩu và chuỗi (có thể là email). Nếu chuỗi nằm trong kho dữ liệu, nó sẽ kiểm tra mật khẩu đối với một băm được lưu trữ. Nếu nó khớp với nó, hãy ghi lại người dùng. Nếu chuỗi không nằm trong kho dữ liệu, nó sẽ tạo một người dùng mới.

EngineAuth cũng có chiến lược appengine_openid cho phép bạn đăng nhập người dùng bằng cách sử dụng App Engine Openid.

Điều tốt đẹp về EngineAuth là nếu người dùng của bạn đăng nhập vào OpenID của App Engine và sau đó họ đăng nhập bằng mật khẩu, nó sẽ liên kết người dùng với cả hai chiến lược.

aeauth

Tôi đã không hoàn toàn hài lòng với EngineAuth, tuy nhiên, vì vậy tôi quyết định tạo ra một thiết kế mô-đun hơn là phụ thuộc nhiều hơn vào webapp2. Tôi chưa bao giờ hoàn thành, vì tôi đang phát triển dự án trong Go ngay bây giờ, nhưng có lẽ mã sẽ giúp ích.

webapp2 auth

Hầu hết các chức năng mật khẩu của EngineAuthaeauth được lấy từ webapp2_extras/auth mà có thể cung cấp cho bạn một cách tiếp cận simpilar.

+0

Rất vui được xem câu trả lời của bạn khi tôi thực sự điều tra giải pháp và mã của bạn một cách chi tiết và thấy đây là một khái niệm rất thú vị khi tham gia Người dùng với nhiều UserProfiles. Tuy nhiên, tôi không thể tìm cách làm cho nó hoạt động với các trình xử lý xác thực GAE mặc định (login: required +/_ah/login_required + @login_required) - Bây giờ tôi đang xem [gae-boilerplate] (https: // github .com/coto/gae-boilerplate). Tôi sẽ theo dõi GitHub của bạn. – mahler

+0

Sử dụng EngineAuth - một cách để xử lý 'login: required' sẽ tự động tạo' appengine_openid' 'user_profile' nếu người dùng đăng nhập với tư cách là người dùng Google. Ngoài ra, bạn có thể tạo một trang trí 'login_require' để kiểm tra các món quà của' request.user' và sử dụng nó thay thế. –

3

Nếu bạn không muốn yêu cầu tài khoản Google hoặc tài khoản OpenID, bạn phải cuộn hệ thống tài khoản của riêng mình. Điều này mang lại cho bạn sự tự do tối đa, nhưng nó là rất nhiều công việc và làm cho bạn chịu trách nhiệm về bảo mật mật khẩu (ouch). Cá nhân tôi sẽ khuyên bạn nên xem xét lại yêu cầu này - OpenID đặc biệt có rất nhiều thứ cho nó (trừ IIUC nó không đơn giản để sử dụng Facebook).

+0

Cảm ơn bạn đã phản hồi và tôi thực sự đồng ý với bạn về những lợi thế của việc mở rộng hệ thống tài khoản. Một trong những ý tưởng của tôi là tạo tài khoản với nhà cung cấp OpenID gọi API của họ từ bên trong ứng dụng của tôi, nhưng tôi chưa tìm thấy nhà cung cấp OpenID có tính năng này. – mahler

+0

Có thể vì việc tạo tài khoản tự động là con đường dẫn đến spam và gian lận lớn. –

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