Forgot Password BackEnd

This commit is contained in:
saeid_01
2019-05-02 23:43:17 +04:30
parent 8da5402aa3
commit c288cee800
6 changed files with 195 additions and 9 deletions
@@ -0,0 +1,79 @@
<?php
namespace Packages\Auth;
use Illuminate\Http\Request;
use App\User;
use App\Http\Controller\Api\Auth\LoginController;
trait SendsPasswordResetEmails
{
/**
* Send a Disposable Password to the given user.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
public function sendDisposablePassword(Request $request)
{
$this->validatePhone($request);
// We will send the Disposable Password
// to send the Disposable Password , we will examine the response then see the message we
// need to show to the user. Finally, we'll send out a proper response.
return $this->generateAndSendCode($request);
}
/**
* Check Disposable Password And Login
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
public function checkDisposablePassword(Request $request)
{
if ( \Cache::has($request->code) ) {
$userid = \Cache::pull($request->code);
$user = User::where('id', $userid)->first();
if($user) {
$password = rand(10000000, 999999999);
$user->password = Hash::make($password);
$user->save();
$request->merge([ 'cell_number' => $user->cell_number, 'password' => $password ]);
return (new LoginController())->login($request);
}
return \MessageResponse::error('User Not Found');
}
return \MessageResponse::error('Error');
}
protected function generateAndSendCode($request)
{
$user = User::where('cell_number', $request->cell_number)->where('verified', 'Verified')->first();
if ($user) {
$code = rand(100000, 999999);
\Cache::put($code, $user->id, Carbon::now()->addMinutes(30));
SMSSender::instance()->patternSend($request->cell_number, '121', ["activate-code" => $code]);
return \MessageResponse::success('Send Disposable Password');
}
return \MessageResponse::error('User Not Found');
}
/**
* Validate the email for the given request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validatePhone(Request $request)
{
$request->validate(['cell_number' => 'required|digits:11']);
}
}
+106
View File
@@ -0,0 +1,106 @@
<?php
namespace Packages\SMSSender;
class SMSSender
{
private $userName = null;
private $password = null;
private $webService = null;
private $fromNumber = null;
private $messageFee = 15;
private $type = 'Other';
private static $panel = null;
private $pattern = [
'121' => 'کد فعال سازی: %activate-code%',
];
private function __construct() { }
public static function instance() {
if (static::$panel === null) {
static::$panel = new static();
}
return static::$panel;
}
public function setUserName ($userName)
{
$this->userName = $userName;
return $this;
}
public function setPassword ($password)
{
$this->password = $password;
return $this;
}
public function setWebService ($webService)
{
$this->webService = $webService;
return $this;
}
public function getUserName ()
{
return ($this->userName) ? $this->userName : env('SMS_USERNAME', '');
}
public function getPassword ()
{
return ($this->password) ? $this->password : env('SMS_PASSWORD', '');
}
public function getFromNumber ()
{
return ($this->fromNumber) ? $this->fromNumber : env('SMS_FROM_NUMBER', '');
}
public function getWebService ()
{
return ($this->webService) ? $this->webService : env('SMS_WEBSERVICE', '');
}
public function patternSend($cellNumber, $pattern_code, $input_data)
{
if (is_string($cellNumber)) {
$cellNumber = [$cellNumber];
}
try {
$user = $this->getUserName();
$pass = $this->getPassword();
$fromNum = $this->getFromNumber();
$client = new \SoapClient($this->getWebService());
$client->sendPatternSms($fromNum, $cellNumber, $user, $pass, $pattern_code, $input_data);
} catch (\SoapFault $sf) {
print $sf->faultcode . "\n";
print $sf->faultstring . "\n";
return ['code' => $sf->faultcode, 'message' => $sf->faultstring];
}
}
public function send($cellNumber, $messageContent)
{
if (is_string($cellNumber)) {
$cellNumber = [$cellNumber];
}
ini_set("soap.wsdl_cache_enabled", "0");
try {
$user = $this->getUserName();
$pass = $this->getPassword();
$fromNum = $this->getFromNumber();
//If you want to send in the future ==> $time = '2016-07-30' //$time = '2016-07-30 12:50:50'
$client = new \SoapClient($this->getWebService());
$client->SendSMS($fromNum, $cellNumber, $messageContent, $user, $pass, '', 'send');
return true;
} catch (\SoapFault $sf) {
print $sf->faultcode . "\n";
print $sf->faultstring . "\n";
return ['code' => $sf->faultcode, 'message' => $sf->faultstring];
}
}
}
+4 -2
View File
@@ -16,8 +16,9 @@ Route::group(['namespace' => 'Api'],function () {
Route::post('/login', 'Auth\LoginController@login')->name('login');
Route::post('/logout', 'Auth\LoginController@logout')->name('logout')->middleware('auth:api');
Route::post('/register', 'Auth\RegisterController@register')->name('register');
Route::post('/password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::post('/password/reset', 'Auth\ResetPasswordController@reset')->name('password.reset');
Route::post('/password/phone', 'Auth\ForgotPasswordController@sendDisposablePassword');
Route::post('/password/verifyCode', 'Auth\ForgotPasswordController@checkDisposablePassword');
Route::post('/password/reset', 'Auth\ResetPasswordController@reset')->name('password.reset')->middleware('auth:api');
});
@@ -33,3 +34,4 @@ Route::post('Users/ChangeStatus/{User}', 'UserController@changeStatus')->middlew
Route::post('Users/ChangeRole/{User}', 'UserController@changeRole')->middleware('auth:api');
Route::post('UpdateInfo', 'UserController@updateInfo')->middleware('auth:api');
Route::resource('Users', 'UserController');
Route::post('/TestResults/Verify/{TestResult}', 'TestResultController@verifyTestResult');
+6 -7
View File
@@ -10,8 +10,10 @@
| contains the "web" middleware group. Now create something great!
|
*/
//
// app()->bind('messages', function() {
// return new \App\Appended\Classes\Common\Response\MessageResponse;
// });
/*
|--------------------------------------------------------------------------
@@ -42,9 +44,6 @@ Route::post('oauth/token/refresh', '\Laravel\Passport\Http\Controllers\Transient
Route::get('oauth/tokens', '\Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser')->middleware('auth:api');
Route::delete('oauth/tokens/{token_id}', '\Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy')->middleware('auth:api');
/*
|--------------------------------------------------------------------------
| Vue Router
@@ -53,6 +52,6 @@ Route::delete('oauth/tokens/{token_id}', '\Laravel\Passport\Http\Controllers\Aut
| Allows vue router to pick up all other URL's.
|
*/
Route::any('{all}', function() {
Route::any('{all}', function(){
return view('welcome');
})->where('all' ,'.*');
})->where(['all' => '.*']);