簡體   English   中英

流星:在服務器端使用帳戶密碼創建用戶

[英]meteor: Creating users using accounts-password on the server side

我正在使用流星帳戶密碼創建用戶注冊網頁。 我不希望用戶在注冊后立即登錄,因此我將請求從客戶端發送到服務器,服務器調用Accounts.createUser({username: someusername, password: somepassword}) 注冊頁面的目的是有一個管理員用戶注冊其他用戶。 一些用戶具有特殊的特權,這些特權使他們將來可以登錄。

我的問題是,當客戶端向服務器發送請求時,例如,

var userParams = {username: someusername, password: somepassword}
Meteor.call("addUser", userParams)

我是從客戶端到服務器通過電線以純文本形式發送密碼嗎? 抱歉,這聽起來像是一個愚蠢的問題。 但是,我使用Wireshark查看了客戶端和服務器之間的流量,但沒有注意到純文本密碼位於IP數據包中。

我想使用帳戶密碼功能,因為我希望具有特殊特權的注冊用戶以后可以登錄和注銷。

因此,我想知道是否有人可以闡明這個問題? 之前是否有其他人做過這樣的事情(即從客戶端請求在服務器端注冊用戶)? 我想聽聽您的建議。

如果您已經有用戶並想要創建花葯用戶,請使用“ admin”帳戶,我建議您使用此軟件包alanning / meteor-roles

並使用此代碼

projectName / server / server.js上使用此方法

Meteor.methods({
 createUsers: function(email,password,roles,name){
   var users = [{name:name,email:email,roles:[roles]},
               ];
.each(users, function (user) {
 var id;
id = Accounts.createUser({
 email: user.email,
 password: password,
 profile: { name: user.name }
 });
if (user.roles.length > 0) {
      Roles.addUsersToRoles(id, user.roles);
     }
    });
},
   deleteUser : function(id){       ///Some Delete Method (ignore if dont needed)
  return Meteor.users.remove(id);
  },
});

在同一個file.js上的另一個文件(例如projectName / server / publish.js)上發布角色

//publish roles
  Meteor.publish(null, function (){ 
   return Meteor.roles.find({})
   })
Meteor.publish("Super-Admin", function () {
    var user = Meteor.users.findOne({_id:this.userId});

     if (Roles.userIsInRole(user, ["Super-Admin"])) {
    return Meteor.users.find({}, {fields: {emails: 1, profile: 1, roles: 1}});
     } 
  this.stop();
      return;
   });

      Meteor.publish("Admin", function () {
   var user = Meteor.users.findOne({_id:this.userId});

    if (Roles.userIsInRole(user, ["Admin"])) {
    return Meteor.users.find({}, {fields: {emails: 1, profile: 1, roles: 1}});
   } 
  this.stop();
 return;
  });
  Meteor.publish(null, function (){ 
 return Meteor.roles.find({})
 })

現在在projectName / client / register / register.html上使用此模板

<template name="register">
  <form id="register-form" action="action" >
    <input type="email" id="register-email" placeholder="Nombre Nuevo Usuario">
    <input type="password" id="register-password" placeholder="Password">        
      <select id="register-rol" class="form-control">
         <option value="Admin" selected>Admin</option>
        <option value="Super-Admin" selected>Super Admin</option>
        <option value="Normal" selected>Normal</option>
     </select>
   <input type="submit" value="Register">
  </form>
<!-- List and button with delete -->
{{#each users}}
      <li id="user"><h6>{{email}}</h6><h6>{{roles}}</h6></li>
        <button id="deleteUser" class="btn btn-danger btn-xs" > Borrar Usuario        {{email}}       </button>
     {{/each}}
</tempalate>

並在projectName / client / register / register.js上

 Template.registrar.events({
 'submit #register-form' : function(e, t) {
e.preventDefault();    
 var email = t.find('#register-email').value,
 password = t.find('#register-password').value,
  roles = $( "#register-rol" ).val();
Meteor.call("createUsers", email, password,roles);
 return false;
  },
'click #deleteUser' : function(event,template){
 var idUsuario= this._id;
 Meteor.call('deleteUser',{_id:idUsuario})
 }
});


//Helper for the {{each}} on the .html
Template.registrar.helpers({
     users: function () {
     return Meteor.users.find();
   },
    email: function () {
    return this.emails[0].address;
    },
   roles: function () {
   if (!this.roles) return '<none>';
return this.roles.join(',');
  }
  });

最后在Subscription.js上訂閱角色

Meteor.subscribe('Admin');
Meteor.subscribe('Super-Admin');

現在,通過此代碼,您可以使用像這樣的助手

 {{#if isInRole 'admin'}}
    <h1> hello Admin </h1?
   {{else}}
   <h1> sorry bro just admin can look at this page</h1>  
  {{/if}}

使用此控件,您可以更好地控制用戶的工作方式以及用戶可以在模板上看到的內容,可以使用相同的邏輯創建所需的角色類型

GL。

處理這種情況的最佳方法是使用accounts-passwords Accounts.sendEnrollmentEmail選項。

var user_id = Accounts.createUser({email: someemail,username: someusername});
Accounts.sendEnrollmentEmail(user_id);

您可以創建一個沒有密碼的帳戶,從而允許用戶稍后通過發送到其電子郵件地址的鏈接添加密碼。

如果此解決方案符合您的要求,那么您還需要了解的其他信息。

用戶單擊電子郵件中的鏈接后要調用的回調函數是使用注冊函數Accounts.onEnrollmentLink設置的

根據文檔,下一步是將令牌傳遞給Accounts.resetPassword函數。 令牌和完成的方法作為參數傳遞給Accounts.onEnrollmentLink。 完成方法是恢復正常的用戶登錄過程。 Accounts.resetPassword函數可以放在客戶端。

請仔細閱讀文檔以獲取更多信息。

實際上,任何涉及創建用戶帳戶並讓用戶通過其登錄憑據的Web應用程序都應通過HTTPS完成。 啟用HTTPS后,將密碼從客戶端傳遞到服務器應該不是問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM