2013-05-03 7 views
18

私は流星のフレームワークとJavaScriptの方がやや新しくなっていますが、フレームワークを使って自分自身を傷つけさせる小さなプロジェクトに取り組んでいます。基本的に私はマイクロブログサイトに取り組んでいます。ログインイベントのMeteor.js

ユーザーは、いくつかのサービス、fb、googleなどでログインすることができます。必要なURLに挿入されたサービスIDを使用してアバターを取得します。しかし、ログインするとすぐにユーザーが自分のアバターを見ることができるようにするためには、ログインが成功した直後にJavaScriptを実行する必要があります。この時点では、私はonLoginスタイルのイベントで何かを見つけることができません。ユーザーがログインしたときにコードを実行するためのハンドルバーテンプレートをハッキングしましたが、このコードは一度しか実行されないように見えます。ユーザーがログアウトしてから戻ると、アバターが表示されなくなります。

これを行うために使用できるイベントを知っている人はいますか?

はここに私のハックテンプレートここ

{{#if currentUser}} 
    {{> userInput}} 
{{/if}} 

はそれが

$('#inputAvatar').css('background-image', 'url('+avatarUrl+')'); 

を呼び出すJS私は助けを本当に感謝です、私はそれが私が見落としてきたことをシンプルなものだと確信していますが、私カントはそれを理解するようです!

ありがとう、ピーター。

答えて

17

私はあなたがそれをやっている方法が最も適切であるかどうかわからないけど、個人的にユーザーがログインした場合に検出するために、クライアント側で次の操作を行います。あなたはグーグルを使用している場合

Tracker.autorun(function(){ 
    if(Meteor.userId()){ 
    //do your stuff 
    } 
}); 
+0

ありがとうございます、それは明らかでした!コードは正常に実行されますが、何らかの理由で私のコードがバックグラウンドイメージを更新することができません。クロムコンソールに入力したときに動作しますが、Deps.autorunメソッドから実行されたときには動作しません。 '$( '#inputAvatar')css( 'background-image'、 'url(\' + avatarURL + ') \ ')'); ' –

+0

**更新**私はDeps.autorun関数と組み合わせたテンプレートの.rendered関数の問題を実際に解決しました。すべての助けをありがとう! –

+0

なぜこれをクライアントで実行する必要があるのか​​尋ねることはできますか?実際には、Metoer.userId()がサーバー上で行うことを実際に混乱させています。 – MurWade

2

ログインまたはその他のo-authログインの場合、ログイン後に実行されるコールバック関数を渡すことができます。

ここにサンプルコードがあります。

Meteor.loginWithGoogle({ 
    requestPermissions: ['email'] 
}, function(error) { 
    if (error) { 
    console.log(error); //If there is any error, will get error here 
    }else{ 
    console.log(Meteor.user());// If there is successful login, you will get login details here 
    } 
}); 
+0

Meteor.loginWithPassword()を含む任意のMeteor.loginでコールバックを利用できるようにする必要があります。()メソッド私はOAuthへの言及を誰も捨てないようにしたい。 https://docs.meteor.com/api/accounts.html#Meteor-loginWithPassword –

関連する問題