小程序手机号登录(功能基本实现,但有欠缺,可在基础上进行优化)

login.wxml

  <view class="container">
  
    <view class="page-body">

      <form catchsubmit="formSubmit">
                <view class="weui-cell__bd" style="margin: 30rpx 0" >
                手机号:
                  <input class="weui-input" name="phone" model:value="{{phone}}" placeholder="请输入手机号" />
                </view>
                <view class="weui-cell__bd" style="margin: 30rpx 0" >
                验证码:
                  <input class="weui-input" name="code" placeholder="请输入验证码" />
                  <button class="btn-code" type="primary" bind:tap="code" >获取验证码</button>
                </view>
            
        <view class="btn-area">
          <button class="btn" type="primary" formType="submit">立即登录</button>
        </view>
      </form>
    </view>
  </view>

 

 login.js

// pages/login/login.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    phone:''
  },
  // 点击立即登录的方法
  formSubmit(evt){
    //console.log(evt.detail.value);
    var param=evt.detail.value;
    wx.request({
      url: 'http://www.tp6.com/login/login', //仅为示例,并非真实的接口地址
      data: param,
      method:"POST",
      header: {
        'content-type': 'application/json' // 默认值
      },
      success (res) {
        // console.log(res.data)
        if (res.data.code == 200) {
          wx.setStorageSync('uid', res.data.data);
        wx.switchTab({
          url: '/pages/index/index',
        })
        }else{
          wx.showToast({
            title: res.data.msg,
            duration: 2000//持续的时间
          })
        }
        
      }
    })
  },
  // 验证码发送的方法
  code(evt){
    var phone=this.data.phone;
    if(phone==''){
      wx.showToast({
        title: '手机号不可以为空',
      })
    }
      console.log(phone);
      wx.request({
        url: 'http://www.tp6.com/login/send', //仅为示例,并非真实的接口地址
        data: {
          phone:phone
        },
        method:"POST",
        header: {
          'content-type': 'application/json' // 默认值
        },
        success (res) {
          console.log(res.data)
          if (res.data.code == 200) {
            
          }else{
            wx.showToast({
              title: res.data.msg,
              duration: 2000//持续的时间
            })
          }
        }
      })

  }
 
})

后端tp5框架控制器进行短信发送

//    发送验证码
    public function send(Request $request){
//        接受手机号
        $phone=$request->post('phone');
//        定义4位数的验证码
        $code=rand(1000,9999);
//        存入缓冲
        cache($phone,$code,60);
        $statusStr = array(
            "0" => "短信发送成功",
            "-1" => "参数不全",
            "-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
            "30" => "密码错误",
            "40" => "账号不存在",
            "41" => "余额不足",
            "42" => "帐户已过期",
            "43" => "IP地址限制",
            "50" => "内容含有敏感词"
        );
        $smsapi = "http://api.smsbao.com/";
        $user = "13610663855"; //短信平台帐号
        $pass = md5("191273214"); //短信平台密码
        $content="【好乐迪】您的验证码为".$code.",在20分钟内有效";//要发送的短信内容
        $sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($content);
        $result =file_get_contents($sendurl) ;
        return Base::jsonData(200,$statusStr[$result]);
    }
    //用户点击登录的触发点击事件
    public function login(Request $request){
        $params=$request->post();
        $userInfo=\app\login\model\Login::userInfo($params['phone']);
        if (!$userInfo){
            return Base::jsonData(500,'手机号不存在');//这里可以跳转至注册页面,在进行登录
        }
//        去除缓冲的中的手机号
        $code=cache($params['phone']);
//        发送过来的验证码和缓冲里的验证码进行比较,
        if ($params['code'] !=$code){
            return Base::jsonData(500,'验证码错误',$code);
        }
        return Base::jsonData(200,'ok',$code);
    }

 

laravel7 小程序登录

wxml:

            <form bindsubmit="formSubmit">
                    <view class="weui-cell__bd" style="margin: 30rpx 0" >
                    手机号:
                    <input class="weui-input" name="phone" model:value="{{phone}}" placeholder="请输入手机号" />
                    </view>
                    <view class="weui-cell__bd" style="margin: 30rpx 0" >
                    验证码:
                    <input class="weui-input" name="code" placeholder="请输入验证码" />
                    <button class="btn-code" type="primary" bind:tap="code" >获取验证码</button>
                    </view>
                
            <view class="btn-area">
            <button class="btn" type="primary" formType="submit">立即登录</button>
            </view>
        </formwx.js
// pages/exam/exam.js
Page({

    /**
     * 页面的初始数据
     */
    data: {
      phone:'',
      code:''
    },
  
  

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {

    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    },
    // 验证码:
    code(evt){
        var phone=this.data.phone;
       
        if(phone==''){
          wx.showToast({
            title: '手机号不可以为空',
          })
        }
          console.log(phone);
          wx.request({
            url: 'http://www.laravel7.com/send', //仅为示例,并非真实的接口地址
            data: {
              phone:phone
            },
            method:"POST",
            header: {
              'content-type': 'application/json' // 默认值
            },
             success (res) {
              console.log(res.data)
              if (res.data.code == 200) {
                wx.showToast({
                    title: '请接收验证码',
                  })
              }
 if(res.data.code==401){
                wx.showToast({
                    title: '请求太过于频繁',
                  })
              } else{
                wx.showToast({
                  title: res.data.msg,
                  duration: 2000//持续的时间
                })
              }
            }
          })
    
      },



    //手机登录:
    formSubmit:function(evt){
        var phone=this.data.phone;
        var code=evt.detail.value.code;
        if(phone==''){
          wx.showToast({
            title: '手机号不可以为空',
          })
        }
        if(code==''){
            wx.showToast({
              title: '验证码不可以为空',
            })
          }
        var param=evt.detail.value;
      
        console.log(param);
       wx.request({
      url: 'http://www.laravel7.com/login', //仅为示例,并非真实的接口地址
      data: param,
      method:"POST",
      header: {
        'content-type': 'application/json' // 默认值
      },
      success (res) {
        console.log(res)
        if (res.data.code == 200) {
             wx.setStorageSync('user_id', res.data.data.id);
//   wx.setStorageSync('uid', res.data.data);
        // wx.switchTab({
        // //   url: '/pages/index/index',
        // })
           wx.showToast({
            title:'登录成功',
            duration: 2000//持续的时间
          })
        }
          if(res.data.code==500){
            wx.showToast({
                title:'手机号不存在',
                duration: 2000//持续的时间
              })
        }
        if(res.data.code==501){
            wx.showToast({
                title:'验证码错误',
                duration: 2000//持续的时间
              })
        }
      }
    })
    },
})

laravel:路由:

//验证码发送
Route::post('send','admin\PhoneController@send');
//手机号登录
Route::post('login','admin\PhoneController@login');

laravel :控制器代码:

<?php

namespace App\Http\Controllers\admin;

use App\Http\Controllers\Controller;
use App\Http\Controllers\Models\Exam;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;

class PhoneController extends Controller
{
    //
    public function send(Request $request)
    {
        $phone = $request->post('phone');
        try {
            $request->validate([
                'phone' => 'required'
            ]);
        } catch (\Exception $e) {
            return ['code' => 400, 'meg' => '手机号码不可以为空', 'data' => ''];
        }
        if (Cache::store('file')->has('code_' . $phone)) {
            return ['code' => 401, 'meg' => '请求太过于频繁', 'data' => ''];
        };
        $code = rand(1000, 9999);
        $statusStr = array(
            "0" => "短信发送成功",
            "-1" => "参数不全",
            "-2" => "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间!",
            "30" => "密码错误",
            "40" => "账号不存在",
            "41" => "余额不足",
            "42" => "帐户已过期",
            "43" => "IP地址限制",
            "50" => "内容含有敏感词"
        );
        $smsapi = "http://api.smsbao.com/";
        $user = "13610663855"; //短信平台帐号
        $pass = md5("191273214"); //短信平台密码
        $content = "【好乐迪】您的验证码为" . $code . ",在20分钟内有效";//要发送的短信内容
        $sendurl = $smsapi . "sms?u=" . $user . "&p=" . $pass . "&m=" . $phone . "&c=" . urlencode($content);
        $result = file_get_contents($sendurl);
        if ($result == 0) {
            Cache::store('file')->put('code_' . $phone, $code, 60);
            return ['code' => 200, 'meg' => '发送成功', 'data' => $statusStr[$result]];
        }
        return ['code' => 500, 'meg' => '发送失败', 'data' => $statusStr[$result]];
    }

    //用户点击登录的触发点击事件
    public function login(Request $request)
    {
        $params = $request->post();
        $userInfo = \App\Models\Exam::where('phone', $params['phone'])->first();
        if (!$userInfo) {
            return ['code' => 500, 'meg' => '手机号不存在', 'data' => ''];
            //这里可以跳转至注册页面,在进行登录
        }
//        取出缓冲的中的手机号
        $code = Cache::get('code_' . $params['phone']);
//        发送过来的验证码和缓冲里的验证码进行比较,
        if ($params['code'] != $code) {
            return ['code' => 501, 'meg' => '验证码错误', 'data' => ''];
        }
        return ['code' => 200, 'meg' => '登录成功', 'data' => ''];
    }


}

新建控制器放入发送短信的验证码和登录

新建一个模型用于数据库对比手机号:有就登录,没有就授权或者注册

php artisan make:controller admin/PhoneController

php artisan make:model  Models\Exam

模型绑定表

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Exam extends Model
{
    //
    protected $table='exam';
    public $timestamps=false;
}

 

posted @ 2021-10-27 20:57  王越666  阅读(260)  评论(0编辑  收藏  举报