За последние 24 часа нас посетили 21599 программистов и 1042 робота. Сейчас ищут 650 программистов ...

yii 2 регистрация авторизация восстановление пароля

Тема в разделе "Прочее", создана пользователем Padaboo, 9 авг 2019.

  1. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Users
    Код (Text):
    1.  
    2. users | CREATE TABLE `users` (
    3.   `id` int(11) NOT NULL AUTO_INCREMENT,
    4.   `email` varchar(255) NOT NULL,
    5.   `phone` varchar(22) NOT NULL,
    6.   `password` varchar(64) NOT NULL,
    7.   `righgts` varchar(60) NOT NULL,
    8.   `verify_key` varchar(65) NOT NULL,
    9.   `activated` int(11) NOT NULL,
    10.   `recovery_key` varchar(65) NOT NULL,
    11.   `recovery_key_life` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    12.   `auth_key` varchar(255) NOT NULL,
    13.   `accessToken` varchar(255) NOT NULL,
    14.   PRIMARY KEY (`id`)
    15. ) ENGINE=MyISAM AUTO_INCREMENT=37 DEFAULT CHARSET=utf
    --- Добавлено ---
    SiteController
    PHP:
    1. <?php
    2.  
    3. namespace app\controllers;
    4.  
    5. use Yii;
    6. use yii\filters\AccessControl;
    7. use yii\web\Controller;
    8. use yii\web\Response;
    9. use yii\filters\VerbFilter;
    10. use app\models\LoginForm;
    11. use app\models\RegisterForm;
    12. use app\models\ContactForm;
    13. use app\models\Users;
    14. use app\helper\DBHelper;
    15. use app\models\Category;
    16. use app\models\Products;
    17. use app\models\News;
    18. use \app\models\Purchases;
    19. use yii\data\Pagination;
    20. use yii\data\ActiveDataProvider;
    21.  
    22. class SiteController extends Controller
    23. {
    24.     public function actionLogin(){
    25.         if (!Yii::$app->user->isGuest) {
    26.             return $this->goHome();
    27.         }
    28.         $model = new LoginForm();
    29.         $user  = new Users();
    30.         if(isset($_POST) && !empty($_POST)){
    31.             $password = $_POST['LoginForm']['password'];
    32.             $email    = $_POST['LoginForm']['username'];
    33.             $remember = (boolean)$_POST['LoginForm']['rememberMe'];
    34.             $password = Users::passwordHash($password);
    35.             $user     = Users::find()->where(['email' => $email, 'password' => $password])->one();
    36.             $email    = DBHelper::mysql_escape($email);
    37.             if(!is_null($user)){
    38.                 $user->scenario = "login";
    39.                 if($user->activated != 0){
    40.                     Yii::$app->user->login($user, $remember ? 3600*24*30 : 0);
    41.                     return $this->goBack();
    42.                 }else {
    43.                     $user->addError('email', 'Account not activated');
    44.                 }
    45.             }else {
    46.                 $user = new Users();
    47.                 $user->email    = $email;
    48.                 $user->password = $password;
    49.                 $user->addError('email', 'Incorrect login or password');
    50.             }
    51.         }
    52.         $model->password = '';
    53.         return $this->render('login', [
    54.             'model' => $model,
    55.             'user'  => $user
    56.         ]);
    57.     }
    58.  
    59.     public function actionLogout(){
    60.         Yii::$app->user->logout();
    61.         return $this->goHome();
    62.     }
    63.  
    64.     public function actionAbout()
    65.     {
    66.         return $this->render('about');
    67.     }
    68.    
    69.     public function actionConfirm($id,$verify_key){
    70.         $model = Users::findOne(['id' => $id, 'verify_key' => $verify_key]);
    71.         if(!is_null($model)){
    72.             if($model->activated != 1){
    73.                $connection = Yii::$app->db;
    74.                $connection->createCommand()->update('users', ['activated' => 1], 'id = :id', [':id' => $model->id])->execute();
    75.                $message  = "Registration confirmed";
    76.             }else {
    77.                 $message = "Already activated";
    78.             }
    79.         }else {
    80.             $message = "User not found";
    81.         }
    82.         return $this->render('message', [
    83.             'message' => $message
    84.         ]);
    85.     }
    86.  
    87.     public function actionRegister(){
    88.         $model                  = new RegisterForm;
    89.         $newUser                = new Users();
    90.         $newUser->activated     = 0;
    91.         $newUser->scenario      = "register";
    92.         if(isset($_POST['ajax']) && $_POST['ajax']==='register-form'){
    93.                 echo CActiveForm::validate($model);
    94.                 Yii::app()->end();
    95.         }
    96.         if(isset($_POST['RegisterForm'])){
    97.                 $newUser->password2  = $_POST['RegisterForm']['password2'];
    98.                 $newUser->password   = $_POST['RegisterForm']['password'];
    99.                 $newUser->email      = DBHelper::mysql_escape($_POST['RegisterForm']['email']);
    100.                 $newUser->phone      = DBHelper::mysql_escape($_POST['RegisterForm']['phone']);
    101.                 $newUser->verify_key = UtilsHelper::randomString(32);
    102.                 if($newUser->password != $newUser->password2){
    103.                     $newUser->addError("password2", "Passwords do not match");
    104.                 }
    105.                 if(!filter_var($newUser->email, FILTER_VALIDATE_EMAIL)){
    106.                     $newUser->addError("email", "It is not email");
    107.                 }
    108.                 $newUser->password      = Users::passwordHash($newUser->password);
    109.                 $newUser->email         = DBHelper::mysql_escape($newUser->email);
    110.                 $newUser->phone         = DBHelper::mysql_escape($newUser->phone);
    111.                 if($newUser->save()) {
    112.                     $id = $newUser->id;
    113.                     $activateString = \Yii::$app->params['host']. "index.php?r=site/confirm&id=" . $id . "&verify_key=" . $newUser->verify_key;
    114.                     $to      = $newUser->email;
    115.                     $subject = 'Registration completed successfully';
    116.                     $message = 'registration confirm: <a href="' . $activateString . '">account activation</a>';
    117.                     $headers = 'From: admin@noreply.com' . "\r\n" .
    118.                         'MIME-Version: 1.0' . "\r\n" .
    119.                         'Reply-To: admin@noreply.com' . "\r\n" .
    120.                         'Content-type: text/html; charset=utf-8' .
    121.                         'X-Mailer: PHP/' . phpversion();
    122.                     mail($to, $subject, $message, $headers);
    123.                     $message = "Registration complite, check your email";
    124.                     return $this->render('message', [
    125.                         'message' => $message
    126.                     ]);
    127.                 }else {
    128.                 }
    129.         }
    130.         return $this->render('register', [
    131.             'model' => $model,
    132.             'user'  => $newUser
    133.         ]);
    134.     }
    135.    
    136.     public function actionRecovery (){
    137.         $user = new Users();
    138.         if(isset($_POST['Users']['email']) && !empty($_POST['Users']['email'])){
    139.             $user->email    = DBHelper::mysql_escape($_POST['Users']['email']);
    140.             $user           = Users::find()->where(["email" => $user->email])->one();
    141.             if(is_null($user)){
    142.                 $user = new Users();
    143.                 $user->addError("email", "User not found");
    144.             }else {
    145.                 $user->recovery_key = UtilsHelper::randomString(32);
    146.                 $recoveryString = \Yii::$app->params['host']. "index.php?r=site/resetpassword&id=" . $user->id . "&recovery_key=" . $user->recovery_key;
    147.                 $connection = Yii::$app->db;
    148.                 $connection->createCommand()->update('users', ['recovery_key' => $user->recovery_key], 'id = :id', [':id' => $user->id])->execute();
    149.                 $to      = $user->email;
    150.                 $subject = 'Recovery password';
    151.                 $message = 'Recovery address: <a href="' . $recoveryString . '">account recovery</a>';
    152.                 $headers = 'From: admin@noreply.com' . "\r\n" .
    153.                     'MIME-Version: 1.0' . "\r\n" .
    154.                     'Reply-To: admin@noreply.com' . "\r\n" .
    155.                     'Content-type: text/html; charset=utf-8' .
    156.                     'X-Mailer: PHP/' . phpversion();
    157.                 mail($to, $subject, $message, $headers);
    158.                 return $this->render('message', [
    159.                     'message' => 'Recovery password'
    160.                 ]);
    161.             }
    162.         }
    163.         return $this->render('recovery', [
    164.             'model' => $user
    165.         ]);
    166.     }
    167.    
    168.     public function actionResetpassword($id, $recovery_key){
    169.         $user = null;
    170.         $user = Users::findOne(['id' => $id, 'recovery_key' => $recovery_key]);
    171.         if(!is_null($user)){
    172.             $passwordClear   = UtilsHelper::randomString(6);
    173.             $password        = Users::passwordHash($passwordClear);//;
    174.             $connection = Yii::$app->db;
    175.             $connection->createCommand()->update('users', ['password' => $password], 'id = :id', [':id' => $user->id])->execute();
    176.             $to      = $user->email;
    177.             $subject = 'New password ';
    178.             $message = "New password: " . $user->password;
    179.             $headers = 'From: admin@noreply.com' . "\r\n" .
    180.                 'MIME-Version: 1.0' . "\r\n" .
    181.                 'Reply-To: admin@noreply.com' . "\r\n" .
    182.                 'Content-type: text/html; charset=utf-8' .
    183.                 'X-Mailer: PHP/' . phpversion();
    184.             mail($to, $subject, $message, $headers);
    185.             return $this->render('message', [
    186.                 'message' => "New password " . $passwordClear . " send to your email address"
    187.             ]);
    188.         }
    189.     }
    190.    
    191.     public function actionSettings(){
    192.        $id   = Yii::$app->user->id;
    193.        $user = Users::find()->where('id = :id', [':id' => $id])->one();
    194.        $user->password = "";
    195.        $message = "Password has ben changed";
    196.        if(isset($_POST['Users']) && !empty($_POST['Users'])){
    197.             $user->password2  = $_POST['Users']['password2'];
    198.             $user->password   = $_POST['Users']['password'];
    199.             $user->phone      = DBHelper::mysql_escape($_POST['Users']['phone']);
    200.             if($user->password != $user->password2){
    201.                 $user->addError("password2", "Passwords do not match");
    202.             }else {
    203.                $user->password      = Users::passwordHash($user->password);
    204.                $user->save();
    205.                 return $this->render('message', [
    206.                     'message' => $message
    207.                 ]);
    208.             }
    209.             $user->password  = "";
    210.             $user->password2 = "";
    211.        }
    212.        return $this->render('settings', [
    213.                'model' => $user
    214.        ]);
    215.     }
    216. }
     
  2. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Божечки! Чем из коробки плохо?