Created
April 6, 2012 08:43
-
-
Save yusugomori/2318237 to your computer and use it in GitHub Desktop.
config/initializers/authentication.coffee
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# config/initializers/authentication.coffee | |
# | |
everyauth = require "everyauth" | |
# Facebook App ID from config/credentials.coffee | |
unless Tower.env is 'production' | |
Tower.config.credentials.facebook.key = Tower.config.credentials.facebook.development.key | |
Tower.config.credentials.facebook.secret = Tower.config.credentials.facebook.development.secret | |
else | |
Tower.config.credentials.facebook.key = Tower.config.credentials.facebook.production.key | |
Tower.config.credentials.facebook.secret = Tower.config.credentials.facebook.production.secret | |
# Logout Handling | |
everyauth.everymodule.logoutPath('/logout') | |
everyauth.everymodule.logoutRedirectPath('/') | |
everyauth.everymodule.handleLogout (request, response) -> | |
request.logout() | |
request.session.userId = undefined # 独自に session.userId を作っているので、これも削除。 | |
@redirect response, @logoutRedirectPath() | |
# Facebook Login | |
everyauth.facebook | |
.appId(Tower.config.credentials.facebook.key) | |
.appSecret(Tower.config.credentials.facebook.secret) | |
.scope('email') # 欲しいFacebookユーザーデータ。 | |
.handleAuthCallbackError((request, response) -> | |
# Error Handling | |
# e.g. /auth/facebook/callback?error_reason=user_denied&error=access_denied&error_description=The+user+denied+your+request | |
response.redirect("/login") | |
).findOrCreateUser((session, accessToken, accessTokenExtra, fbUserMetadata) -> | |
promise = @Promise() | |
User = App.User # app/models/user.coffee を使う。 | |
User.where(userId: fbUserMetadata.id).first (error, record) => # DB検索。 facebookのidをuserIdとして保存している。 | |
if error | |
return promise.fail(error) | |
if record.get? # 既存ユーザー | |
session.userId = record.get "userId" | |
session.save() # セッションに保存 | |
promise.fulfill record.get "userId" | |
else # 新規ユーザー | |
User.createFromFacebook(session, accessToken, fbUserMetadata, promise) | |
return promise # promiseを返すことで、promise.fulfill() されるまで処理がブロックされる | |
).redirectPath('/') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
"独自に session.userId を作っているので、これも削除。"
Loose translation:
Creates unique session.userId, eliminates this also.
" 欲しいFacebookユーザーデータ。"
Wants Facebook user data.
"app/models/user.coffee を使う。"
Uses app/models/user.coffee .
"DB検索。 facebookのidをuserIdとして保存している。"
Database retrieval. Preserves facebook id as userId.
"既存ユーザー"
Existence of user.
"セッションに保存"
Preserves session.
"promiseを返すことで、promise.fulfill() されるまで処理がブロックされる"
This returns a promise which is not yet fulfilled while process is running.