1

usermeteorを使用して、外部サービスでログイン(認証)した後、承認クレームを取得するためにレコードを拡張できるようにしたいと思います。

アップデート{{loginButtons}}ハンドルバーヘルパーウィジェット を使用しています。

現在、新しいユーザーの作成中にフックできるとが表示されますAccounts.validateNewUserAccounts.onCreateUserこれらは最初は役に立ちますが、私の必要性は繰り返し発生します。

コレクションへのユーザーのアクセスを承認する手段として、allowハングオフする機能があることを理解しています。これは、承認を決定するためにユーザーを拡張する目的で使用する場所です。Meteor.Collectionclaims

ログインプロセス中にこれを実行できるフックを知っている人はいますか?

4

6 に答える 6

14

コールバックの欠如を回避する最も簡単な方法は、関連するリアクティブ変数を使用することです。

Tracker.autorun(function() {
  if (Meteor.userId()) {
    // do something when they've just logged in.
  }
});

によるコンテキスト設定は、値が変更されたとき、つまりログインしたautorunときにのみ再実行されます。Meteor.userId()

于 2012-11-13T23:36:28.630 に答える
5

Meteor 0.7.2バージョン以降、サーバー側のフックが利用可能になりました: Accounts.onLogin()

于 2014-03-19T11:32:41.267 に答える
1

パスワードを使用したログインに関するMeteorのドキュメントから、実行する必要のあるコールバックがすでに設定されているようです。

Meteor.loginWithPassword(user, password, [callback])

callback関数オプションのコールバック。成功の場合は引数なしで、失敗の場合は単一のError引数を使用して呼び出されます。

ログインコールバックは、Meteorと外部認証サービスの両方でサポートされています。

于 2012-11-13T13:08:15.167 に答える
0

@マキタ、答えてくれてありがとう。私はそのcallbackパラメータを見ましたが、私の質問で言及しなかったのは、{{loginButtons}}ハンドルバーヘルパーを使用してユーザー管理ウィジェットを挿入しているため、低レベルのフックがないということでした(これは非常に素晴らしいです)。

このアプローチの問題は、認証が行われた後にコールバックにアクセスできなかったことでした。そのため、このプルリクエストを作成しました。これは、問題を解決するためにマージされることを望んでいます。

https://github.com/meteor/meteor/pull/479

これにより、次の電話をかけることができるはずです。

Accounts.ui.config({
    onSuccess: function (err) {
        //perform addl authorization on Meteor.user() here
    }
});
于 2012-11-13T18:41:00.073 に答える
0

2014年にこれに来る人々のために、あなたはonLoginコールバックサーバー側を使うことができます

Accounts.onLogin((obj)-> user = ob.user)

于 2014-11-29T06:52:22.800 に答える
0

受け入れられた回答については、ページの再読み込みでその解決策を台無しにする問題がありました。私はこのようなことをすることになりました(角度のある流星を使用していますが、要点を理解する必要があります。トラッカーの代わりに自動実行を使用してください)

.run(function($meteor,$rootScope,$state,$localstorage){
$meteor.autorun($rootScope, function(){
    var id = Meteor.userId();
    if(id == undefined || id == null){
        id = '';
    }
    if($localstorage.get('user_id','') != id){
        $localstorage.set('user_id',id);
        if(Meteor.userId()){
            //On login
            $state.go('profile',{user_id: Meteor.userId()});
        }else{
            //On logout
            $state.go('main');
        }
    }
});
});

デフォルトのアカウントの使用をやめるときは、開発にこのソリューションをお勧めします-ui下位レベルの機能を実装する必要があり、これは必要ありません。

于 2015-06-15T18:11:54.783 に答える