微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

流星账户资料

如何解决流星账户资料

我希望我的用户拥有包含姓名和头像的个人资料。我无法正常工作。 (实际上,我正在继承一些代码)。我需要有人告诉我如何修改以下代码,以便我的用户个人资料名称注册页面中的用户名相同。

要非常清楚,当创建用户时,有一个选项可以填写配置文件,该配置文件用户的子文档。在我的个人资料中,我想要一个名称和图像。创建用户后,我们会存储密码、电子邮件用户名内容。我还想存储配置文件,并将配置文件中的名称记录为与用户名相同。这似乎是不可能的,正如您从我们从电子邮件删除个人资料名称的糟糕代码中看到的那样。请帮我在创建用户时设置个人资料名称

这是 oncreateuser 的覆盖:

从'meteor/accounts-base'导入{帐户};

Accounts.oncreateuser((options,user) => {
  console.log('\nsign up attempt:',new Date());


  // Handle password signup
  if (user.services.password) {
    const email = user.emails[0].address;
    const name = email.split('@')[0];
    console.log(
      '\nservice --> password','\nname:',name,'\nemail:',email,);

    // Extend user's profile by adding default name and avatar
    const profile = {
      name,avatar: 'user.png',};

    return { roles: [],...user,profile };
  }

  // Handle facebook signup
  if (user.services.facebook) {
    const { id,gender,email } = user.services.facebook;
    console.log(
      '\nservice --> facebook','\nid:',id,'\ngender:',);

    // Extend user's profile by adding facebook data
    const profile = {
      name,avatar: `http://graph.facebook.com/${id}/picture/`,profile };
  }

  // Throw in case of a different service
  throw new Error(401,'Sign up attempt with service different than facebook or password');
});

这真的很糟糕。我不想从电子邮件获取用户名。相反,我想使用登录页面中的用户名。这是一些创建用户代码

import gql from 'graphql-tag';
import Auth from '/app/api/auth';
import { storeLoginToken } from './store';

async function createuser({ username,password,profile },apollo) {
  const result = await apollo.mutate({
    mutation: gql`
      mutation createuser ($username: String,$email: String,$password: HashedPassword!,$profile: createuserProfileInput) {
        createuser (username: $username,email: $email,password: $password,profile: $profile) {
          id
          token
          tokenExpires
        }
      }
    `,variables: {
      username,password: Auth.hashPassword(password),profile,},});

  const { id,token,tokenExpires } = result.data.createuser;
  await storeLoginToken(id,new Date(tokenExpires));
  return id;
}

export default createuser;

这是一些我不明白的奇怪的东西“createuserProfileInput”的graphql突变:

import gql from 'graphql-tag';

const types = gql`
  extend input createuserInput {
    profile: createuserProfileInput!
  }

  input createuserProfileInput {
    name: String!
  }


  type Mutation {
    # Create a new user.
    createuser (username: String,email: String,password: HashedPassword,plainPassword: String,profile: createuserProfileInput): LoginMethodResponse

这是我的用户个人资料集合片段:

  'profile.name': {
    type: String,max: 150,optional: true,'profile.gender': {
    type: String,max: 50,'profile.avatar': {
    type: String,

这是我的注册页面

import React from 'react';
import { Link } from 'react-router-dom';
import { compose,setdisplayName } from 'recompose';
import { FormattedMessage as T,injectIntl } from 'react-intl';
import { withRouteProps,withFormProps,withServiceProps,withSEO } from '/app/ui/hocs';
import AuthPageLayout from '/app/ui/layouts/auth-page';
import { PasswordAuthViews,FBAuthBtn } from '/app/ui/components/smart/auth';
import Feedback from '/app/ui/components/dumb/Feedback';

const SignupPage = ({
  intl: { formatMessage: t },disabled,errorMsg,successMsg,handleBefore,handleClientError,handleServerError,service,setService,loginUrl,}) => (
  <AuthPageLayout
    title={t({ id: 'signup' })}
    subtitle={t({ id: 'signupSubTitle' })}
    link={<Link to={loginUrl()}><T id="login" /></Link>}
  >
    <PasswordAuthViews
      view="signup"
      btnLabel={t({ id: 'signup' })}
      disabled={disabled}
      onBeforeHook={() => {
        // Keep track of the auth service being used
        setService('password');
        handleBefore();
      }}
      onClientErrorHook={handleClientError}
      onServerErrorHook={handleServerError}
    />
    {service === 'password' && (
      <Feedback
        loading={disabled}
        errorMsg={errorMsg}
        successMsg={successMsg}
      />
    )}
    {/* <div className="center">
      <T id="signupOrText" />
    </div>
    <FBAuthBtn
      btnLabel={t({ id: 'signupFBButton' })}
      disabled={disabled}
      onBeforeHook={() => {
        // Keep track of the auth service being used
        setService('facebook');
        handleBefore();
      }}
      onServerErrorHook={handleServerError}
    />
    {service === 'facebook' && (
      <Feedback
        loading={disabled}
        errorMsg={errorMsg}
        successMsg={successMsg}
      />
    )} */}
  </AuthPageLayout>
);

export default compose(
  injectIntl,withRouteProps,withSEO({ title: 'signup' }),setdisplayName('SignupPage'),)(SignupPage);

解决方法

如果您只想让 profile.name 属性与用户名相同,您可以从 username 钩子中的 user 中提取 onCreateUser 属性,然后将其传递给配置文件。

Accounts.onCreateUser((options,user) => {
  console.log('\nsign up attempt:',new Date());


  // Handle password signup
  if (user.services.password) {
    const email = user.emails[0].address;
    const name = user.username; 
    console.log(
      '\nservice --> password','\nname:',name,'\nemail:',email,);

    // Extend user's profile by adding default name and avatar
    const profile = {
      name,avatar: 'user.png',};

    return { roles: [],...user,profile };
  }
    ...
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。