افزایش قیمت آموزشها به بیش از 2 برابرقیمت فعلی         بزودی 
مدیریت کاربران مشترک
بروز خطا
امتیازات دریافتی

قابلیت فراموشی رمز عبور برای framework با php

libcode  11 ماه پیش  8 ماه پیش
0
0
1

اگر آموزش های توسعه ی وب با ساختار lamp را از سایت uncox خوب مطالعه نکرده باشید . درک کردن این قابلیت گنگ است. برای استفاده باید حتماً توضیحات را با دقت بخوانید و سپس استفاده کنید.


این قابلیت برروی پروژه ی notes که داخل آموزش توسعه ی وب با ساختار lamp همین سایت هست نوشته شده. همچنین برای بهبود یافتن و کامل شدن باید خودتان پی گیر باشید. اما برای سایت های ساده به خوبی کار میکند.

در ابتدا باید فایل sql را که دارای table ی به نام x_hashlink که برای همین قابلیت لازم است را به دیتابیس سایت خود import کنید که در پیوست همین اسنیپ قرار دارد.

توجه داشته باشید که این table باید ساختار مشخصی داشته باشد بنابراین اضافه یا حذف هر یک از فیلد های باعث خرابکاری میشود و حتما برای فیلد های اضافه تر باید برنامه نویسی بیشتری صورت گیرد.

در مرحله ی بعد باید متد های فایل UserModel در داخل پوشه model وارد کنید. که هر کدام یک کاری را درسمت دیتا بیس انجام می دهند. پس هرگونه تغییر به عهده ی خودتان است و حتماً اگر به سر فصل 7 که قسمت security هست رسیدید حتماً این فایل را طبق قاعده ی امن شده ی خود بنویسید. این که این متد ها چطور کار میکنند باید به فایل userController نگاه کنید تا متوجه شوید.

در مرحله ی سوم فایل UserController را به usercontroller خود اضافه کنید . متد forgotPassword ابتدا سعی در دریافت ایمیل از کاربر را دارد و در صورتی که نتوانست ایمیل را درافت کند فرمی که کاربر لازم است آنرا پر کند را نمایش می دهد. این اطلاعات یک ایمیل از کاربر میخواهد که باید وجود داشته باشد و سپس به دنبال آن در دیتابیس می گردد با متد fetch_by_email و اگر این کاربر وجود نداشته باشد پیغام مناسب با سیستم message نمایش داده میشود و در غیر این صورت با استفاده از ایمیل اطلاعات مربوطه را دریافت می کند و نام کاربری ، کاربر را به صورت encrypt شده و همرا با ایمیل به متد send_hashed_email فرستاده میشود و ایمیل را تحویل این متد private می دهد و سپس این متد در دیتابیس hashlink ایمیل کاربر را درج میکند و سپس آنرا همراه با نام کاربری encrypt شده به فایل مورد نیاز فرستاده میشود و توجه کنید کاربر در اینجا نمی تواند ایمیل خود را ببیند اما میتواند هم ببیند در هر صورت باید دوباره بازگردانده شود چون لازم است. در صفحه ی مربوطه از کاربر خواسته شده که نام کاربری خود را جهت صحت کامل کند. فایل مربوطه پاسخ کاربر را به متد get_name_from_user میفرستد که این متد نیز برای اینکه از صحت ایمیل مطمئن شود باز هم اطلاعات را دریافت میکند و در صورت موفقیت به مرحله ی بعدی می رود . شاید بگویید قبلاً ایمیل بازرسی شده چرا دوباره باید بازرسی شود ، توجه کنید که اگر کاربر کمی از برنامه نویسی سر در بیاورد ممکن است در صفحه ای که دارد نام کاربری خود را وارد میکند ممکن است ایمیل خود را تغییر دهد به همین خاطر دوباره ایمیل بازرسی میشود.

این متد نیز در صورت موفقیت آمیز بودن از طریق متد insert_forgot_hash یک hash را برای کاربری با همان ایمیل درج میکند و سپس اطاعات لازم را برای send_hashed_link_for_email ارسال میکند که وظیفه ی فرستادن ایمیل را دارد . توجه کنید که تمامی تست ها و کل این امکان باید روی سایت online تست شود به هیچ عنوان آنرا روی localhost خود تست نکنید چون خطا دریافت میکنید. و هچنین دقت کنید که ایمیل شما ممکن است به صورت هرزنامه داخل ایمیل شناسایی شود پس سایت تان را در گوگل تایید کنید تا سایت شما معتبر باشد. بعد از دریافت ایمیل کاربر به سایت باز گشته و با خود hash را به متد getNewPassword میفرستد و در آنجا دوباره یک فرم درخواست میشود که این بار از کاربر میخواهد رمز های جدید خود را وارد کند و سپس صحت رمز ها و برابری را قبل از درج رمز جدید را باهم مقایسه کرده تا باهم مطابقت داشته باشند و قبل از درج زمان حال را دریافت میکند چرا که به ابن متد گفته شده که اگر زمان انقضای لینکی که به ایمیل کاربر ارسال شده از زمان حال بیشتر باشد ، کاربر باید درخواست مجدد بدهد و در غیر اینصورت ادامه داده و سپس رمز را با salt ی که در config تعریف شده encrypt کرده و در دیتابیس به صورت md5 شده قرار میگیرد. و سپس لینک hash شده از دیتابیس حذف میگردد تا چیزی خراب نشود. و برای استفاده کافیست که یک دکمه در صفحه ی ورود خود که از نوع تگ باید باشد را به مسیری که forgotPassword در آن قرار دارد متصل کنید مانند "/forgotPassword/نام base سایت" که در این صورت باید در config خود مسیر ها را تعریف کنید طبق آموزش ها مانند user/forgotPassword => /forgot و همچنین بقیه ی متد های public را باید در config خود تعریف کنید.

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


اسنیپ
UserControllerUserModellink-forgot-passwordget-new-passwordget-nicknamecommon+
length : 0 words : 0 lines : 0