ali_vampire

ساخت فرم forgot password

5 ارسال در این موضوع قرار دارد

سلام...من یه فرم لاگین و رجیستر با استفاده از php& mysql درست کردم، حالا میخوام forgot password رو هم بهش اضافه کنم؟ کسی نمونه کدی ازش داره و یا میتونه راهنماییم کنه؟؟؟

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با سلامیک نمونه کامل سورس برای پیاده سازی مورد درخواستی شما.هرجای سورس نکته / ابهامی داشت بفرمایید تا بیشتر راهنمایی کنیم.ساختار دیتابیس : 

CREATE TABLE password_reset_request (sno int(11) NOT NULL AUTO_INCREMENT,email varchar(50) NOT NULL,encrypted_temp_password varchar(256) NOT NULL,salt varchar(10) NOT NULL,created_at datetime DEFAULT NULL,PRIMARY KEY (sno))

کدهای مربوط به Operation دیتابیس :در این کد موارد مانند امنیت پسور هم لحاض شده شده و Encrypt میشود.

<?php class DBOperations{     public function passwordResetRequest($email){         $random_string = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", 6)), 0, 6);        $hash = $this->getHash($random_string);        $encrypted_temp_password = $hash["encrypted"];        $salt = $hash["salt"];         $sql = 'SELECT COUNT(*) from password_reset_request WHERE email =:email';        $query = $this -> conn -> prepare($sql);        $query -> execute(array('email' => $email));         if($query){             $row_count = $query -> fetchColumn();             if ($row_count == 0){                 $insert_sql = 'INSERT INTO password_reset_request SET email =:email,encrypted_temp_password =:encrypted_temp_password,                salt =alt,created_at = :created_at';                $insert_query = $this ->conn ->prepare($insert_sql);                $insert_query->execute(array(':email' => $email, ':encrypted_temp_password' => $encrypted_temp_password,                        'alt' => $salt, ':created_at' => date("Y-m-d H:i")));                 if ($insert_query) {                     $user["email"] = $email;                    $user["temp_password"] = $random_string;                     return $user;                 } else {                     return false;                 }            } else {                 $update_sql = 'UPDATE password_reset_request SET email =:email,encrypted_temp_password =:encrypted_temp_password,                salt =alt,created_at = :created_at';                $update_query = $this -> conn -> prepare($update_sql);                $update_query -> execute(array(':email' => $email, ':encrypted_temp_password' => $encrypted_temp_password,                        'alt' => $salt, ':created_at' => date("Y-m-d H:i")));                 if ($update_query) {                     $user["email"] = $email;                    $user["temp_password"] = $random_string;                    return $user;                 } else {                     return false;                 }            }        } else {             return false;        }    }     public function resetPassword($email,$code,$password){         $sql = 'SELECT * FROM password_reset_request WHERE email = :email';        $query = $this -> conn -> prepare($sql);        $query -> execute(array(':email' => $email));        $data = $query -> fetchObject();        $salt = $data -> salt;        $db_encrypted_temp_password = $data -> encrypted_temp_password;         if ($this -> verifyHash($code.$salt,$db_encrypted_temp_password) ) {             $old = new DateTime($data -> created_at);            $now = new DateTime(date("Y-m-d H:i"));            $diff = $now->getTimestamp() - $old->getTimestamp();             if($diff < 120) {                 return $this -> changePassword($email, $password);             } else {                 false;            }        } else {             return false;        }    }}

کدهای مربوط به عملیات یا Functions : 

<?php require_once 'DBOperations.php';require 'PHPMailer/PHPMailerAutoload.php'; class Functions{     private $db;    private $mail;     public function __construct() {         $this -> db = new DBOperations();        $this -> mail = new PHPMailer;     }     public function resetPasswordRequest($email){         $db = $this -> db;         if ($db -> checkUserExist($email)) {             $result =  $db -> passwordResetRequest($email);             if(!$result){                 $response["result"] = "failure";                $response["message"] = "Reset Password Failure";                return json_encode($response);             } else {                 $mail_result = $this -> sendEmail($result["email"],$result["temp_password"]);                 if($mail_result){                     $response["result"] = "success";                    $response["message"] = "Check your mail for reset password code.";                    return json_encode($response);                 } else {                     $response["result"] = "failure";                    $response["message"] = "Reset Password Failure";                    return json_encode($response);                }            }        } else {             $response["result"] = "failure";            $response["message"] = "Email does not exist";            return json_encode($response);         }    }     public function resetPassword($email,$code,$password){         $db = $this -> db;         if ($db -> checkUserExist($email)) {             $result =  $db -> resetPassword($email,$code,$password);             if(!$result){                 $response["result"] = "failure";                $response["message"] = "Reset Password Failure";                return json_encode($response);             } else {                 $response["result"] = "success";                $response["message"] = "Password Changed Successfully";                return json_encode($response);             }        } else {             $response["result"] = "failure";            $response["message"] = "Email does not exist";            return json_encode($response);         }    }     public function sendEmail($email,$temp_password){         $mail = $this -> mail;        $mail->isSMTP();        $mail->Host = 'smtp.gmail.com';        $mail->SMTPAuth = true;        $mail->Username = 'your.email@gmail.com';        $mail->Password = 'password';        $mail->SMTPSecure = 'ssl';        $mail->Port = 465;         $mail->From = 'your.email@gmail.com';        $mail->FromName = 'Your Name';        $mail->addAddress($email, 'Your Name');         $mail->addReplyTo('your.email@gmail.com', 'Your Name');         $mail->WordWrap = 50;        $mail->isHTML(true);         $mail->Subject = 'Password Reset Request';        $mail->Body    = 'Hi,

Your password reset code is '.$temp_password.' . This code expires in 120 seconds. Enter this code within 120 seconds to reset your password.

Thanks,
Learn2Crack.';         if(!$mail->send()) {             return $mail->ErrorInfo;         } else {             return true;         }    }     public function sendPHPMail($email,$temp_password){         $subject = 'Password Reset Request';        $message = 'Hi,nn Your password reset code is '.$temp_password.' . This code expires in 120 seconds. Enter this code within 120 seconds to reset your password.nnThanks,nLearn2Crack.';        $from = "your.email@example.com";        $headers = "From:" . $from;         return mail($email,$subject,$message,$headers);     }}

کد دسترسی یا index :

if ($operation == 'resPassReq') { if(isset($data -> user) && !empty($data -> user) &&isset($data -> user -> email)){ $user = $data -> user;$email = $user -> email; echo $fun -> resetPasswordRequest($email); } else { echo $fun -> getMsgInvalidParam(); }}else if ($operation == 'resPass') { if(isset($data -> user) && !empty($data -> user) && isset($data -> user -> email) && isset($data -> user -> password)&& isset($data -> user -> code)){ $user = $data -> user;$email = $user -> email;$code = $user -> code;$password = $user -> password; echo $fun -> resetPassword($email,$code,$password); } else { echo $fun -> getMsgInvalidParam(); }

تیکه کدهای بالا سمت سرور میباشند!و اما کدهای مربوط به کلاینت : کدهای مربوط به رابط کاربری برنامه یا XML : 

<?xml version="1.0" encoding="utf-8"?>                                                                             

کدهای جاوا که قالب Fragment پیدا سازی شده اند : 

import android.app.Fragment;import android.app.FragmentTransaction;import android.os.Bundle;import android.os.CountDownTimer;import android.support.design.widget.Snackbar;import android.support.v7.widget.AppCompatButton;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.EditText;import android.widget.ProgressBar;import android.widget.TextView; import com.learn2crack.loginregistration.models.ServerRequest;import com.learn2crack.loginregistration.models.ServerResponse;import com.learn2crack.loginregistration.models.User; import retrofit2.Call;import retrofit2.Callback;import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory; public class ResetPasswordFragment extends Fragment implements View.OnClickListener{     private AppCompatButton btn_reset;    private EditText et_email,et_code,et_password;    private TextView tv_timer;    private ProgressBar progress;    private boolean isResetInitiated = false;    private String email;    private CountDownTimer countDownTimer;     @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {         View view = inflater.inflate(R.layout.fragment_password_reset,container,false);        initViews(view);        return view;    }     private void initViews(View view){         btn_reset = (AppCompatButton)view.findViewById(R.id.btn_reset);        tv_timer = (TextView)view.findViewById(R.id.timer);        et_code = (EditText)view.findViewById(R.id.et_code);        et_email = (EditText)view.findViewById(R.id.et_email);        et_password = (EditText)view.findViewById(R.id.et_password);        et_password.setVisibility(View.GONE);        et_code.setVisibility(View.GONE);        tv_timer.setVisibility(View.GONE);        btn_reset.setOnClickListener(this);        progress = (ProgressBar)view.findViewById(R.id.progress);     }     @Override    public void onClick(View v) {        switch (v.getId()){             case R.id.btn_reset:                 if(!isResetInitiated) {                     email = et_email.getText().toString();                    if (!email.isEmpty()) {                        progress.setVisibility(View.VISIBLE);                        initiateResetPasswordProcess(email);                    } else {                         Snackbar.make(getView(), "Fields are empty !", Snackbar.LENGTH_LONG).show();                    }                } else {                     String code = et_code.getText().toString();                    String password = et_password.getText().toString();                     if(!code.isEmpty() && !password.isEmpty()){                         finishResetPasswordProcess(email,code,password);                    } else {                         Snackbar.make(getView(), "Fields are empty !", Snackbar.LENGTH_LONG).show();                    }                 }                 break;        }    }     private void initiateResetPasswordProcess(String email){         Retrofit retrofit = new Retrofit.Builder()                .baseUrl(Constants.BASE_URL)                .addConverterFactory(GsonConverterFactory.create())                .build();         RequestInterface requestInterface = retrofit.create(RequestInterface.class);         User user = new User();        user.setEmail(email);        ServerRequest request = new ServerRequest();        request.setOperation(Constants.RESET_PASSWORD_INITIATE);        request.setUser(user);        Call response = requestInterface.operation(request);         response.enqueue(new Callback() {            @Override            public void onResponse(Call call, retrofit2.Response response) {                 ServerResponse resp = response.body();                Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();                 if(resp.getResult().equals(Constants.SUCCESS)){                     Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();                    et_email.setVisibility(View.GONE);                    et_code.setVisibility(View.VISIBLE);                    et_password.setVisibility(View.VISIBLE);                    tv_timer.setVisibility(View.VISIBLE);                    btn_reset.setText("Change Password");                    isResetInitiated = true;                    startCountdownTimer();                 } else {                     Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();                 }                progress.setVisibility(View.INVISIBLE);            }             @Override            public void onFailure(Call call, Throwable t) {                 progress.setVisibility(View.INVISIBLE);                Log.d(Constants.TAG,"failed");                Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show();             }        });    }     private void finishResetPasswordProcess(String email,String code, String password){         Retrofit retrofit = new Retrofit.Builder()                .baseUrl(Constants.BASE_URL)                .addConverterFactory(GsonConverterFactory.create())                .build();         RequestInterface requestInterface = retrofit.create(RequestInterface.class);         User user = new User();        user.setEmail(email);        user.setCode(code);        user.setPassword(password);        ServerRequest request = new ServerRequest();        request.setOperation(Constants.RESET_PASSWORD_FINISH);        request.setUser(user);        Call response = requestInterface.operation(request);         response.enqueue(new Callback() {            @Override            public void onResponse(Call call, retrofit2.Response response) {                 ServerResponse resp = response.body();                Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();                 if(resp.getResult().equals(Constants.SUCCESS)){                     Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();                    countDownTimer.cancel();                    isResetInitiated = false;                    goToLogin();                 } else {                     Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();                 }                progress.setVisibility(View.INVISIBLE);            }             @Override            public void onFailure(Call call, Throwable t) {                 progress.setVisibility(View.INVISIBLE);                Log.d(Constants.TAG,"failed");                Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show();             }        });    }     private void startCountdownTimer(){        countDownTimer = new CountDownTimer(120000, 1000) {             public void onTick(long millisUntilFinished) {                tv_timer.setText("Time remaining : " + millisUntilFinished / 1000);            }             public void onFinish() {                Snackbar.make(getView(), "Time Out ! Request again to reset password.", Snackbar.LENGTH_LONG).show();                goToLogin();            }        }.start();    }     private void goToLogin(){         Fragment login = new LoginFragment();        FragmentTransaction ft = getFragmentManager().beginTransaction();        ft.replace(R.id.fragment_frame,login);        ft.commit();    }}

کد رو بررسی کنید اگر سوالی / مشکلی داشتید مطرح کنید تا راهنماییتان کنم.توجه داشته باشید که اگر قصد راهنمایی کامل بخواین صورت نمیگیره چرا که اول باید خودتون بررسی کنید، فقط تیکه کدی رو که اشکال دارید مطرح کنید.درضمن یادمه دوستانی در مورد retrofit سوالاتی رو میپرسیدن، این سورس کد برپایه Retrofit میباشد. پس سورس کد خوبی هم برای اون دسته از دوستان میتونه باشهامیدوارم که به دردتون بخوره.موفق باشید:heart:

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با سلام

یک نمونه کامل سورس برای پیاده سازی مورد درخواستی شما.

هرجای سورس نکته / ابهامی داشت بفرمایید تا بیشتر راهنمایی کنیم.

سلام داداش ببخشید بی جا میپرسم من از این کتابخونه استفاده میکنم ولی وقتی متنای فارسی میفرستم دیتابیس ذخیره بشه به صورت ??? ذخیره میشه

شما راه حلی داری برای این مشکل؟:(

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با سلام

یک نمونه کامل سورس برای پیاده سازی مورد درخواستی شما.

هرجای سورس نکته / ابهامی داشت بفرمایید تا بیشتر راهنمایی کنیم.

سلام داداش ببخشید بی جا میپرسم من از این کتابخونه استفاده میکنم ولی وقتی متنای فارسی میفرستم دیتابیس ذخیره بشه به صورت ??? ذخیره میشه

شما راه حلی داری برای این مشکل؟:(

موقع ارسال به UTF-8 تبدیل کنید بعد ارسال کنید

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با سلام

یک نمونه کامل سورس برای پیاده سازی مورد درخواستی شما.

هرجای سورس نکته / ابهامی داشت بفرمایید تا بیشتر راهنمایی کنیم.

سلام داداش ببخشید بی جا میپرسم من از این کتابخونه استفاده میکنم ولی وقتی متنای فارسی میفرستم دیتابیس ذخیره بشه به صورت ??? ذخیره میشه

شما راه حلی داری برای این مشکل؟:(

موقع ارسال به UTF-8 تبدیل کنید بعد ارسال کنید

من هرچی گشتم نفهمیدم چجوری وگرنه اینکارو قبلا گفتن که انجام بدم

کل مستندات رتروفیت رو زیر و رو کردم نفهمیدم باز

میشه کدشو بذاری؟

و دقیقا کجاش باید اینکار رو بکنیم؟

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری