メテオアカウントの拡張(ログインシステム)


これは、最初に投稿された記事の更新は、現在消滅し、気象学です.COM .Here is the archived version.
このコードは、Meteor 2.3.5で実装されています.
流星は、アカウントと呼ばれる本当に良いユーザ認証システムを持っています.それはとても強力で、パスワード、Facebook、Twitterや他のOAuthプロバイダを使用してログインのサポートに組み込まれているAtmosphere ). もう一つの重要な事実は、Meteorアカウントが緊密に炉心メテオサービスと大きなレベルのセキュリティを提供するように結合されていることです.
しかし、カスタム認証メソッドを追加するにはどうすればよいですか?カスタム認証メソッドの追加もかなり簡単です.どのようにしましょう.
このチュートリアルでは、Meteorアプリの管理目的のカスタム認証システムを作成します.

This is not a properly implemented authentication system! It is only for demonstration purposes!


始める

  • を作成する流星アプリmeteor create admin --blaze
  • 追加accounts-ui パッケージmeteor add accounts-ui
  • 変更するindex.html 次のコードでは、単純な追加loginButtons からのヘルパーaccount-ui パッケージを削除し、info テンプレート
  • <head>
      <title>admin</title>
    </head>
    
    <body>
      <h1>Welcome to Meteor!</h1>
    
      {{> hello}}
    </body>
    
    <template name="hello">
      <button>Click Me</button>
      <p>You've pressed the button {{counter}} times.</p>
      {{> loginButtons}}
      <input type="button" value="Click" />
    </template>
    
    今、あなたがアプリケーションを起動すると、以下のようなものが表示されます(赤でメッセージを心配しないでください).

    ログハンドラの追加


    今、我々は管理者認証システムのログインハンドラを登録する必要があります.これはサーバー側の機能ですので、次のコンテンツを作成しますserver/main.js . 詳細はコメントを参照ください.
    import { Accounts } from 'meteor/accounts-base';
    
    Accounts.registerLoginHandler(function(loginRequest) {
      // There are multiple login handlers in meteor.
      // A login request go through all these handlers to find it's login handler
      // so in our login handler, we only consider login requests which has admin field
      if(!loginRequest.admin) {
        return undefined;
      }
    
      // Our authentication logic 😉
      if(loginRequest.password !== 'admin-password') {
        return null;
      }
    
      // We create a admin user if none exists, and get the userId
      let userId = null;
      const user = Meteor.users.findOne({ username: 'admin' }, { fields: { _id: 1 } });
      if(!user) {
        userId = Meteor.users.insert({username: 'admin'});
      } else {
        userId = user._id;
      }
    
      // Send logged in user's user id 🎉
      return {
        userId
      }
    });
    
    今、我々は我々の基本で行われますloginHandler .

    クライアント側ログイン機能


    メインクライアントJSファイルに次のコンテンツを追加しますclient/main.js ). コードのコメントを参照してください
    import { Meteor } from 'meteor/meteor';
    
    Meteor.loginAsAdmin = function(password, callback) {
      // Create a login request with admin: true, so our loginHandler can handle this request
      const loginRequest = { admin: true, password: password };
    
      // Send the login request 📤
      Accounts.callLoginMethod({
        methodArguments: [loginRequest],
        userCallback: callback
      });
    };
    
    今私たちの管理ログインシステムを追加しました.ジャストコールloginAsAdmin ブラウザコンソール内のメソッド.管理者ユーザがログインしているのを見るでしょう.
    Meteor.loginAsAdmin('admin-password');
    

    あなたが見ることができるように、我々は現在管理者ユーザーとしてログインされます.
    それだ!振り返ると、
  • 我々は我々のアプリの管理ログインシステムを作成しようとしていた
  • それから、我々は新しいloginHandler そのために
  • ログイン要求を呼び出すクライアント側関数も追加しました
  • 利益!
    あなたはこれを見つけることができますcompleted application on GitHub .
    Meteorで新しい認証システム/メソッドを追加するのは簡単ですか?私はあなたの考えを知ってみよう!
    あなたが私の仕事が好きならGitHub Sponsors ❤️ .