目录
登录和注册时都需要查询用户是否已存在:
登录是为了查看用户是否是新用户(新用户去注册)
注册是为了查看用户是否已经被注册(被注册去登录)
验证成功后:
登录验证就签发token——登陆成功(前端跳转首页)
注册验证就将注册信息添加到用户表里——注册成功(前端跳转登录)
1:win+R打开命令行进行阿里云换源
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
2:cd 到项目根路径下安装依赖
composer require alibabacloud/client
<?php
namespace app\controller;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\NlsCloudMeta\NlsCloudMeta;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
use app\model\sms; /*引入你自己的短信模型地址*/
class Indexsms
{
/**
* 发送短信验证码
*/
/*接收的是登录接口发送过来的数据phone:手机号,type:请求类型-login/register*/
public function index($phone, $type)
{
$code = rand(100000, 999999); /*验证码随机*/
$config = [ /*将下面的参数换成在阿里云上得到的参数*/
'accessKeyId' => 'Access Key ID',
'accessSecret' => 'Access Key Secret',
'SignName' => '短信签名',
'TemplateCode' => '模板ID',
'regionId' => 'cn-hangzhou' /*不用改这里的地址*/
];
$param = ['code' => $code];
AlibabaCloud::accessKeyClient($config['accessKeyId'], $config['accessSecret'])
->regionId($config['regionId'])
->asDefaultClient();
try {
$result = AlibabaCloud::rpc()
->product('Dysmsapi')
->version('2017-05-25')
->action('SendSms')
->method('POST')
->options([
'query' => [
'PhoneNumbers' => $phone,
'SignName' => $config['SignName'],
'TemplateCode' => $config['TemplateCode'],
'TemplateParam' => json_encode($param)
],
])
->request();
/*发送成功存入数据库,将手机号,验证码,请求类型写入短信表*/
$smsModel = new sms();
$saveSms = $smsModel->saveSms($phone, $code, $type);
return $result->toArray();
} catch (ClientException $e) {
echo $e->getErrorMessage() . PHP_EOL;
} catch (ServerException $e) {
echo $e->getErrorMessage() . PHP_EOL;
}
}
}
//短信登陆
/**
* remarks:用户登录-短信发送
*
* phone(手机号)/type(long/register)
*/
public function index()
{
/*用户表中查询手机号是否存在*/
$adminModel = new admin();
$data = request::only(['phone', 'type']);
$regular = preg_match('/^1[3456789]\d{9}$/', $data['phone']);/*验证手机格式*/
if ($regular == 0) {
return json(['code' => 0, 'msg' => '手机号格式不正确']);
} else {
$checkUser = $adminModel->checkphone($data['phone'], 'login');
if ($checkUser == null) {
return json(['code' => 0, 'msg' => '抱歉,该手机号是新户暂时不能使用短信登陆!']);
} else {
$sendsms = new Indexsms();/*实列化发送短信的阿里控制器*/
$send = $sendsms->index($data['phone'], $data['type']);/*带数据过去*/
if ($send) {
return json(['code' => 1, 'msg' => '发送成功,请注意查收短息5分钟内生效!']);
} else {
return json(['code' => 0, 'msg' => '发送失败,网络繁忙请稍后再试!']);
}
}
}
}
/**
* remarks:用户登录-验证短信
*
* phone/type
*/
public function checkLogin()
{
$data = request::only(['phone', 'code', 'type']);
/*查询短信验证码*/
$smsModel = new sms();
$checkCode = $smsModel->checkCode($data);
if ($checkCode == null) {
return json(['code' => 0, 'msg' => '验证码错误,请重新核对!']);
} else {
$uid = new admin();
$key = 'token';
$payload = [
"iat" => time(), /*令牌签发时间*/
"nbf" => time(), /*如果当前时间在nbf里的时间之前,则Token不被接受*/
"exp" => time() + 60 * 60 * 24 * 7, /*过期时间*/
"uid" => $uid->uid($data['phone']),/*验证用户id是否相同*/
];
$smsModel->editCodeState($checkCode['id']);/*验证成功后更改短信的有效性(改无效)*/
$token = JWT::encode($payload, $key, "HS256");
return json(['code' => 1, 'msg' => '登陆成功', 'token' => $token]);
}
}
* remarks:注册
*/
public function register()
{
$data = request::only(['phone', 'type']);
$regular = preg_match('/^1[3456789]\d{9}$/', $data['phone']);
if ($regular == 0) {
return json(['code' => 0, 'msg' => '手机号格式不正确']);
} else {
/*查询手机号是否为空*/
$nullphone = new admin();
if ($nullphone->checkphone($data['phone']) == null) {
$sendsms = new Indexsms();/*实列化发送短信的阿里控制器*/
$send = $sendsms->index($data['phone'], $data['type']);
if ($send) {
return json(['code' => 1, 'msg' => '发送成功,请注意查收短息5分钟内生效!']);
} else {
return json(['code' => 0, 'msg' => '发送失败,网络繁忙请稍后再试!']);
}
} else {
return json(['code' => 0, 'msg' => '抱歉,该手机号已被注册!']);
}
}
}
/**
* remarks:用户注册-验证短信
*
*/
public function checkRegister()
{
$data = request::only(['phone', 'code', 'password', 'type']);
$register = new sms();
$codeinfo = $register->checkCode($data);
if ($codeinfo == null) {
return json(['code' => 0, 'msg' => '验证码错误,请重新核对!']);
} else if (!empty($data['phone']) && !empty($data['password'])) {
/*修改短信有效状态*/
$register->editCodeState($codeinfo['id']);
$password = md5($data['password']);
$adduser = new admin();
$adduser = $adduser->save([
'phone' => $data['phone'],
'password' => $password,
]);
return json(['code' => 1, 'msg' => '注册成功!']);
} else {
/*注册失败*/
return json(['code' => 1, 'msg' => '表单信息不完整!']);
}
}
我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
我正在使用Mandrill的RubyAPIGem并使用以下简单的测试模板:testastic按照Heroku指南中的示例,我有以下Ruby代码:require'mandrill'm=Mandrill::API.newrendered=m.templates.render'test-template',[{:header=>'someheadertext',:main_section=>'Themaincontentblock',:footer=>'asdf'}]mail(:to=>"JaysonLane",:subject=>"TestEmail")do|format|format.h
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于
我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path
Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我的公司有一个巨大的数据库,该数据库接收来自多个来源的(许多)事件,用于监控和报告目的。到目前为止,数据中的每个新仪表板或图形都是一个新的Rails应用程序,在巨大的数据库中有额外的表,并且可以完全访问数据库内容。最近,有一个想法让外部(不是我们公司,而是姊妹公司)客户访问我们的数据,并且决定我们应该公开一个只读的RESTfulAPI来查询我们的数据。我的观点是-我们是否也应该为我们的自己
我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:
我读了"BingSearchAPI-QuickStart"但我不知道如何在Ruby中发出这个http请求(Weary)如何在Ruby中翻译“Stream_context_create()”?这是什么意思?"BingSearchAPI-QuickStart"我想使用RubySDK,但我发现那些已被弃用前(Rbing)https://github.com/mikedemers/rbing您知道Bing搜索API的最新包装器(仅限Web的结果)吗? 最佳答案 好吧,经过一个小时的挫折,我想出了一个办法来做到这一点。这段代码很糟糕,因为它是