これまでは、クライアント側認証を使用してきました。サーバー側のeveryauthをセットアップしたところ、うまく機能してFB.getLoginStatus
いますが、ページが読み込まれたときに(クライアント側で行ったこと)のようなことをするにはどうすればよいですか?
ユーザーがすでにログインしている場合、再度プロセスを実行したくありません。
説明してくれてありがとう!
これまでは、クライアント側認証を使用してきました。サーバー側のeveryauthをセットアップしたところ、うまく機能してFB.getLoginStatus
いますが、ページが読み込まれたときに(クライアント側で行ったこと)のようなことをするにはどうすればよいですか?
ユーザーがすでにログインしている場合、再度プロセスを実行したくありません。
説明してくれてありがとう!
ドキュメントから
everyauth は、ServerRequest インスタンス req の便利なメソッドも提供します。req にアクセスできる任意のスコープから、次の便利な getter とメソッドを取得します。
req.loggedIn
- リクエストがログインしているユーザーによるものかどうかを通知する Boolean getter
req.user
- セッションに関連付けられたユーザー ドキュメント
req.logout()
- 認証データのセッションをクリアします
エクスプレス ビュー内:
Express を使用している場合、everyauth にはいくつかの便利な動的ヘルパーが付属しています。それらを有効にするには:
var express = require('express') , everyauth = require('everyauth') , app = express.createServer(); everyauth.helpExpress(app);
次に、ビュー内から、ヘルパー everyauth にアタッチされた次のヘルパー メソッドにアクセスできます。
everyauth.loggedIn
Jade テンプレートを使用している場合、home.jade などの .jade ファイル内のコードに従って、ユーザーのログイン ステータスを確認できます。
if (!everyauth.loggedIn) // <-----
a(href="/your_url_here/") log in with facebook
else
p Welcome <username>
node.js で次のようにします。
var userlogin = function () {
var req = this.request
,res = this.response
,login = req.body
,username = login.username
,password = login.password;
if(username === 'tester' && password === '12345'){
req.session.user_id = xxxxxx;
res.redirect('/');
}else{
res.redirect('/login');
}
}
var checkAuth = function(fn_auth, fn_unauth){
var req = this.request
,res = this.response
,unauthCallback;
if(req.session.user_id){
fn_auth(); //execute fn_auth if user is logged in. callback can be set to redirect to root path '/'
}else{
fn_unauth(); //execute fn_unauth calback which bring user to login path '/login'
}
}
}
基本的に、ユーザーがすでにログインしているときにリダイレクトするだけです。