2

小さな会社のインターン ドキュメント共有プロジェクトに取り組んでいます。これをメテオでやりたい。私は html/javascript はよく使いますが、データベースは使いません。私の問題は、ユーザーを処理することです。ここでの調査のため、クライアント側でユーザーを作成することがすでに可能かどうかはわかりません。公式ドキュメントには、ユーザーを処理する方法がいくつか示されていますが、例はありません。次のようにサーバー側でリストを作成しようとしました:

Users = new Meteor.Collection("users");

次に、次のように起動時にユーザーを挿入します。

//on Client side
if (Meteor.isClient) {
var username = "My Name";

    Meteor.call("create_user", username, function(error, user_id) {
         Session.set("user_id", user_id);
});
}

//on Server side
if(Meteor.is_server) {
Meteor.methods({
    create_user: function(username) {
        console.log("CREATING USER");
        var USER_id = Users.insert({name: username});
        return user_id;
    },
});
}

しかし、html テンプレートでユーザー名を読み取っても機能しません...

登録とログインの良い例はありますか?

乾杯

4

3 に答える 3

7

Meteor でアカウント機能を追加するのは非常に簡単です。単純な電子メール、パスワード、または facebook connect/twitter などを使用することができます。

ユーザー アカウントが設定されたシンプルな meteor アプリを取得するには、次の手順を実行します。

meteor create simpleapp
cd simpleapp

accounts-ui および accounts-password パッケージを追加します

meteor add accounts-ui
meteor add accounts-password

facebook/twitter/github/google ログインなどを実装するための他のアカウント関連パッケージを追加するだけです。

他の利用可能な流星パッケージを一覧表示するには、このコマンドを使用します

meteor list

simpleapp.html ファイルをこれに編集して、ログイン ボタンなどを追加します。

<head>
  <title>simpleapp</title>
</head>

<body>
  {{> hello}}
</body>

<template name="hello">
  <h1>Hello World!</h1>
  {{greeting}}
  <input type="button" value="Click" />
  {{loginButtons}}
</template>

{{loginButtons}}デフォルトのログインボタンを追加するために、デフォルトのhtmlファイルに追加しただけです..

meteor アプリを実行して、localhost:3000 に移動します。

meteor

多くの作業を行わずにログイン機能を実装しました。4 ~ 5 行のコードで、パスワードを忘れた、新しいユーザーを登録するなどの処理も​​行います。

次に、ユーザーがサインインしているときに特定の html を表示する必要があります。{{currentUser}}グローバルを使用してこれを行います。

それに応じて実装します

<template name="hello">
  <h1>Hello World!</h1>
  {{greeting}}
  <input type="button" value="Click" />
  {{loginButtons}}
  {{#if currentUser}}
    {{> loggedInTemplate}}
  {{else}}
    {{> loggedOutTemplate}}
  {{/if}}
</template>

<template name="loggedInTemplate">
  <!-- user is logged in -->
</template>
<template name="loggedOutTemplate">
  <!-- user is logged out -->
</template>
于 2013-01-08T11:32:40.213 に答える
1

ユーザーシステムを手動で作成する必要はありません。accounts パッケージを使用するだけです:

Meteor アカウント システムは、発行およびメソッドでの userId サポートの上に構築されます。コア パッケージは、データベースに格納されたユーザー ドキュメントの概念を追加し、追加パッケージは、安全なパスワード認証、サード パーティのログイン サービスとの統合、および事前構築済みのユーザー インターフェイスを追加します。

ただし、コードは機能するはずです。ただし、ユーザー名プロパティをクライアントに公開していないため、テンプレートに表示されない可能性があります。

于 2013-01-08T09:53:50.583 に答える
0

わかりました、ありがとう、それは簡単です。しかし、loggedInTemplate または LoggedOutTemplate を変更することはできません。

私が持っているものをお見せします:

//the html

<head>
   <title>myApp | documents</title>
</head>

<body>
<div id="headerBox">
    {{> header}}
</div>
<div id="sideBox">
    {{> side}}
</div>
<div id="contentsBox">
    {{> contents}}
</div>
</body>


<template name="header">
<h1>Company name</h1>
</template>

<template name="contents">
{{#if currentUser}}
   <p>Welcome to documents</p>
{{else}}
   <h3>Hello! Please log in!</h3>
   <p><input type="text" id="username" placeholder="Username"><input type="text" id="password" placeholder="Password"><input type="button" value="log me in!"></p>
{{/if}}
 </template>

 <template name="side">
<p>Hello {{ activeUser }}</p>
<p><input type="button" value="Create New Document" onclick="createPage()"></p>
<h3>Documents:</h3>
 </template>

//client.js

Pages = new Meteor.Collection("pages");

Meteor.startup(function() {
   Session.set("activeUser", "please log in!");
});

Template.side.activeUser = function() {
    return Session.get("activeUser");
};

//server.js

Meteor.startup(function() {
    Accounts.createUser({username: "MyName", email: "me@example.com", password: "123456"});
});

そして、起動時に作成されたこのユーザーを手動でログインする方法を探しています。もちろん、後でこのユーザーが新しいユーザーを作成できるようにします...

問題は追加です

// Returns an event_map key for attaching "ok/cancel" events to
// a text input (given by selector)
var okcancel_events = function (selector) {
    return 'keyup '+selector+', keydown '+selector+', focusout '+selector;
};

// Creates an event handler for interpreting "escape", "return", and "blur"
// on a text field and calling "ok" or "cancel" callbacks.
var make_okcancel_handler = function (options) {
var ok = options.ok || function () {};
var cancel = options.cancel || function () {};

return function (evt) {
    if (evt.type === "keydown" && evt.which === 27) {
    // escape = cancel
    cancel.call(this, evt);
  } else if (evt.type === "keyup" && evt.which === 13) {
    // blur/return/enter = ok/submit if non-empty
    var value = String(evt.target.value || "");
    if (value)
      ok.call(this, value, evt);
    else
      cancel.call(this, evt);
   }
 };
};

Template.contents.events = {};

Template.contents.events[okcancel_events('#password')] = make_okcancel_handler({
    ok: function (text, event){
        var usernameEntry = document.getElementById('username');
        var passwordEntry = document.getElementById('password');
        Meteor.loginWithPassword({usernameEntry, passwordEntry});
        event.target.value = "";    
    }
});

クライアントにはうまくいきません...

于 2013-01-09T10:18:58.843 に答える