Magento 使用手机号注册登录

31 篇文章 0 订阅

Magento 默认使用邮箱注册登录,国内目前许多用户并没有使用邮箱的习惯,所以需要使用手机号来实现注册。
使用手机号注册,需要关联的地方比较多而杂,这里只说个大概以及思路。
手机注册涉及到的修改包括:
1.添加手机号字段
2.注册流程
3.登录流程
4.忘记密码,通过手机号重置密码
5.后台用户表(grid表)显示手机号信息
6.未登录用户在结账页面的注册和登录流程
7.用户信息修改页面
8.许多自己添加的功能和用户手机号相关联的,这就需要自己修改了


1.添加手机号字段
可以自行搜索为用户添加一个新的属性的方法,也可以安装管理用户属性的插件,后台直接添加,这里就不多说了。

2.注册流程
注册页面可以添加个 tab 切换使用邮箱注册还是使用手机号注册,也可以新添加一个链接跳转到的是使用手机号注册。这里使用后者举例:
默认注册页面的 handle 是
customer_account_create 在 customer.xml 中定义了它的layout等
我们可以根据它修改自己的handle例如是
customer_account_createmobile
重写Customer的controller 并创建action

    public function createmobileAction()
    {
        if ($this->_getSession()->isLoggedIn()) {
            $this->_redirect('*/*');
            return;
        }

        $this->loadLayout();
        $this->_initLayoutMessages('customer/session');
        $this->renderLayout();
    }

新建自己的 register_mobile.phtml
注意这里的 form action 可以写一个新的 action url
在这个 phtml 中重要的地方就是 发送短信 按钮设置 onclick事件。
使用 ajax 实现发送短信,记录session等操作。(注意设置发送短信按钮,点击的时间间隔)
发送ajax请求,系统生成随机的验证码存入session, 我这里同时存入了手机号
还有一点,就是magento邮箱字段不可为空(否则修改的太多,没尝试过 - -!),所以这里还需要隐藏一个input用来存放假的 email (系统自动生成)
又来一点:
注意检测手机号是否已经注册过了。

$session = $this->_getSession();
// 我是写在了customer的 accountController类中
// 获取session你也可以写为
// $session = Mage::getSingleton('customer/session');
$session->setMobile($mobile);
$session->setMobileCode($mobile_code);

存入手机号,是为了用户点击注册按钮时,检测提交的手机号是否还是用来获取验证码那个手机号,防止用户篡改手机号。
注意存入session等操作应等到调用 短信接口返回 成功时候执行。
这个时候用户注册例如post数据到 createmobilePostAction()
我们就可以在这里做数据有效性检验,包括手机号格式,手机号是否被修改,验证码是否正确等操作。都正确 保存手机号即可。

3.登录流程
前端直接去掉对于输入的是否是邮箱的检验,修改 placeholder属性提示手机号也可以即可。
数据post到 方法 loginPostAction()
这里大致核心代码为:

 $userName = trim($login['username']);
 if(!strstr($userName,'@') && strlen($userName) == 11){
 // 不是邮箱 长度为11 则为手机号 粗略的检测,可自行修改
 $mobileNu = Mage::getModel('customer/customer')->getCollection()
            ->addAttributeToFilter('mobile', $userName)
            ->getFirstItem();
 if($mobileNu->getData('email')){
    $login['username'] = $mobileNu->getData('email');
  }
 }

思路其实就是根据手机号先找到邮箱,再使用邮箱登陆。

4.忘记密码,通过手机号重置密码
忘记密码页面也是可以让用户选择是通过邮箱重置密码或者 通过手机号重置密码。
通过手机号重置密码流程是:
输入手机号 -> 获取验证码 -> 输入验证码提交数据 -> 判断验证码是否正确,是否存在使用这个手机号注册的用户 -> 一切正常,自动跳转到重置密码页面 -> 重置密码 -> 结束

重置密码前端页面需要注意的地方可以参考注册流程前端页面,根据需要修改即可。 例如post 数据到 forgotPasswordMobilePostAction()
在这个方法中,需要检测数据有效性等,一切正常生成token,然后跳转即可
核心代码:

if ($customerId) {
    try {
        $newResetPasswordLinkToken = Mage::helper('customer')->generateResetPasswordLinkToken();
        $customer->changeResetPasswordLinkToken($newResetPasswordLinkToken);
        $url = Mage::getUrl('').'customer/account/resetpassword?id='.$customerId.'&token='.$newResetPasswordLinkToken;
        Mage::app()->getFrontController()->getResponse()->setRedirect($url);
        return;
    } catch (Exception $exception) {
        Mage::log('catch');
        $this->_getSession()->addError($exception->getMessage());
        $this->_redirect('*/*/forgotpassword');
        return;
    }
}

5.后台用户表(grid表)显示手机号信息
为后台显示用户信息的表添加手机号显示字段
重写Mage\Adminhtml\Block\Customer\Grid.php
修改方法 _prepareCollection()
在 $collection后面添加

->addAttributeToSelect('mobile')

修改方法 _prepareColumns()
在合适位置添加代码:

$this->addColumn('mobile', array(
            'header'    => Mage::helper('customer')->__('手机号'),
            'index'     => 'mobile',
            'width'     => '10'
        ));

6.未登录用户在结账页面的注册和登录流程
修改 template\persistent\customer\form\login.phtml即可
参考用户登录页面前端修改。

7.用户信息修改页面
修改 template\customer\form\edit.phtml
为用户添加修改手机号的输入框即可,也需要获取短信验证码。
在controller 中修改editPostAction() 方法即可
注意检测手机号是否已经注册过了。

8.许多自己添加的功能和用户手机号相关联的,这就需要自己修改了
无能为力了,自己考虑修改吧。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值