معرفی پروژه DNTFrameworkCore
پروژه DNTFrameworkCore که قصد پشتیبانی از آن را دارم، یک زیرساخت سبک وزن و توسعه پذیر با پشتیبانی از طراحی چند مستاجری با کمترین وابستگی به کتابخانههای ثالث میباشد که با تمرکز بر کاهش زمان و افزایش کیفیت توسعه بخش منطق تجاری پروژههای تحت وب، توسعه داده شده است. به مرور زمان مطالب و مستندات آن نیز کامل خواهد شد. برای برخی از امکانات از جمله اعتبارسنجی خودکار، مدیریت تراکنش ها، شماره گذاری خودکار و ... آزمون واحد نیز در نظر گرفته شده است که در آینده نزدیک با تکمیل آزمون واحد بخشهای دیگر، انتشار آنها نیز انجام خواهد شد.
برای نصب و استفاده از بستههای نیوگت آن، دستورات زیر را اجرا کنید:
PM>Install-Package DNTFrameworkCore PM>Install-Package DNTFrameworkCore.EntityFramework PM>Install-Package DNTFrameworkCore.Web PM>Install-Package DNTFrameworkCore.Web.EntityFramework
به منظور بررسی دقیقتر امکانات آن میتوانید پروژه TestAPI موجود در مخزن گیت هاب را بررسی کنید.
نمونه API پیاده سازی شده:
[Route("api/[controller]")] public class TasksController : CrudController<ITaskService, int, TaskReadModel, TaskModel, TaskFilteredPagedQueryModel> { public TasksController(ITaskService service) : base(service) { } protected override string CreatePermissionName => PermissionNames.Tasks_Create; protected override string EditPermissionName => PermissionNames.Tasks_Edit; protected override string ViewPermissionName => PermissionNames.Tasks_View; protected override string DeletePermissionName => PermissionNames.Tasks_Delete; }
پروژههای مرتبط با این قضیه اسمهای مشابهی دارند که گاها بعضی افراد، هر کدام از اسمها را که دوست دارند، به همه اطلاق میکنند؛ ولی تفاوتهایی در این بین وجود دارد:
- OpenPGP: یک برنامه نیست و یک قانون و استانداری برای تهیهی آن است؛ که رعایت اصول آن الزامی است و برنامهی بالا، یک پیاده سازی از این استاندارد است.
- PGP: یک برنامه، برای رمزگذاری اطلاعات است که مخفف Pretty Good Privacy است.
- و GnuPG یا GPG که در بالا به آن اشاره شد.
در صورتیکه از ویندوز استفاده میکنید، نیاز است ابتدا خط فرمان یونیکس را روی آن نصب کنید. برنامهی Cygwin این امکان را به شما میدهد تا خط فرمان یونیکس و دستورات پیش فرض آن را داشته باشید. این برنامه در دو حالت ۳۲ بیتی و ۶۴ بیتی ایجاد شده است. از آنجا که گفتیم این برنامه شامل دستورات پیش فرض آن است، برای همین GPG باید به صورت یک بستهی جداگانه نصب شود که در سایت آن میتوانید بستههای مختلف آنرا برای پلتفرمهای مختلف را مشاهده کنید.
ساخت کلید
برای ساخت کلید دستور زیر را صادر کنید:
gpg --gen-key
Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only)
What keysize do you want? (2048)
بعد از آن مدت زمان اعتبار این کلید را از شما جویا میشود:
Key is valid for? (0)
دو هفته 2w دو سال 2y
You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" Real name: ali yeganeh.m Email address: yeganehaym@gmail.com Comment: androidbreadcrumb You selected this USER-ID: "ali yeganeh.m (androidbreadcrumb) <yeganehaym@gmail.com>"
اگر مشکلی در ساخت کلید نباشد با ارسال دستور زیر باید آن را در لیست کلیدها ببینید:
ali@alipc:~$ gpg --list-keys /home/ali/.gnupg/pubring.gpg ---------------------------- pub 2048R/8708016A 2015-10-23 [expires: 2065-10-10] uid ali yeganeh.m (androidbreadcrumb) <yeganehaym@gmail.com> sub 2048R/533B7E96 2015-10-23 [expires: 2065-10-10]
تبدیل کد متنی به کد دودویی
یکی از روشهای ارسال کدهای دودویی تبدیل آنان به یک قالب متنی ASCII است که به آن قالب ASCII Armor هم میگویند. سایتهای زیادی وجود دارند که این عبارت متنی را از شما میخواهند. چرا که مثلا این امکان وجود دارد که کلیدی که کاربر به سمت آنان میفرستد، آسیب دیده باشد یا اینکه KeyServerها در دسترس نباشند. در مورد این سرورها در ادامه صحبت خواهیم کرد. مثلا یکی از سایتهایی که به این عبارتها نیاز دارد Bintray است.
برای دریافت این کلید متنی باید دستور زیر را صادر کنید:
gpg --output mykey.asc --export -a $GPGKEY
gpg --output mykey.asc --export -a 8708016A
ali@alipc:~$ cat mykey.asc -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 mQENBFYqAJABCADcw5xPonh5Vj7nDk1CxDskq/VsO08XOa/i2OLOzatB4oK5x+0x jxORxXMnIAR83PCK5/WkOBa64jnu3eiP3jKEwAykGGz/Z1bezC9TIP8y+PnsiDhT aFArluUJx+RT5q7s27aKjqoc3fR/xuwLWopZt9uYzE/DQAPDsHdUoUg+fh4Hevm+ a8/3ncR7q6nM8gc9wk621Urb1HaRrILdmeh7ZpJcl8ZUbc+NObw357fGsjnpfHXO rdCr7ClvNUq6I+IeGMQG/6040LeeaqhaRxPrUhbFjLA155gkSqzecxl7wQaYc71M Zdlv+6Pt1B8nPAA3WXq0ypjU8A5bvmAQRD5LABEBAAG0OGFsaSB5ZWdhbmVoLm0g KGFuZHJvaWRicmVhZGNydW1iKSA8eWVnYW5laGF5bUBnbWFpbC5jb20+iQE+BBMB AgAoBQJWKgCQAhsDBQld/A8ABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDS Lhq8hwgBanaHB/4reGxUjR6dB08ykfwQOx+raYHGqJlgawisE4qUHTkGaspyQaNy yxh0vwKkGvg6nNy2VN1XFBc7jlHlrYqPPuPdg2B+1LvEghb30ESDbHUvk8NrJgDJ C0257gxqWvUQTWvMC3FkSLdw3tyQ8dF7FxmSU79XcxVqGeseaDzMQrEasP0yJHsm NJf8pvuD6qiWu3KSSoQmI/17Sj8s7eGJMh6o5YRFGHc1Bt9tCD+52bvt579Ju4vZ tmQvxR4fNQo9sAeMqAJhIpF7IYcuyCEy+CQ847UkzE4f/OCCPxfV3samV/nnBJJ9 Ouu+68lk6Fpx4A0a3nEwqoAmMWxrbSSUFW97uQENBFYqAJABCAC4CzrUOKskE4hK GVCjaOJKxhbuUdOrep6n3vof0fscs5Dy7h2oVh2vb12WH9X6pijJVPiUpGR4Mpu0 lO2Bu9Rwt38AQ6mRmL/hfzjEXSvKkdX7osk+1CVnnUaSdM9Ek2hWUH8JcN28z/WT X9Bw8MCdZF7j1HvX/5ojghzMZyYM4elWJLBr1gON6xXAI6HR7DlnRkaVr8L9SYGm FyAXZ0LzWYwG1Z1AnTyxff6v/Mn3p1/1E3aBA+LkQqBzHg2nBm4jCaFWfeCdiNBf CHkY9r/Evo9hUPD+CtBNFwsUm1D4maZ0FFtIQ701QhVmupnub+rKoObC0AFj3abK MCw9uo8TABEBAAGJASUEGAECAA8FAlYqAJACGwwFCV38DwAACgkQ0i4avIcIAWrz rAf+K1IIMtBq3WlabfZQrgzFHQ62ugVJO/yI1ITkm4l08XHDf+ShqDg4urNuMDEe oQD35MvB2BhER1jL6VR3qjLkZyZYJ+EQiSxEDWXooav3KvpWjhcqjQy79GFs8waH E7ssGmWwaugVS/PJAmGQ+s8YWDNa6aCClmp2dJRiwBTyFdewNBLA2V32xzWCYxhI YtEp+Kg15XuCDTRatOPWSFGSPe/paytmpGZc0XzU/W9sBpabhxVmcL4H6L07uCef IOn/S5QXo3P9X/3ckmJ9GUb7rjdq1ivYgX53xI75jlePsmN/2f+3fNffUaZgFTTd Uls+XCun7OVYSBBfjgRfQbTvoA== =6j7i -----END PGP PUBLIC KEY BLOCK-----
gpg --output mykey.asc --export-secret-key -a 8708016A
آپلود کلید به سرورهای کلید (Key Servers)
یکی از روشهای به اشتراک گذاری کلید برای کاربران این است که از سرورهای کلید استفاده کنیم. یکبار آپلود روی یکی از این سرورها باعث میشود که به بقیهی سرورها هم اضافه شود. یکی از این سرورهای کلید که خودم از آن استفاده میکنم، سرور ابونتو است و با استفاده از دستور زیر، همان کلید بالا را برای آن سرور ارسال میکنم:
gpg --send-keys --keyserver keyserver.ubuntu.com $GPGKEY ==> gpg --send-keys --keyserver keyserver.ubuntu.com 8708016A
رمزگذاری
ابتدا در محیط یونیکس، یک فایل متنی ساده با متن hello ubuntu را ایجاد میکنم. در ادامه قصد دارم این فایل را رمزنگاری کنم:
ali@alipc:~$ cat >ali.txt hello ubuntu
ali@alipc:~$ gpg --output myali.gpg --encrypt --recipient yeganehaym@gmail.com ali.txt
رمزگشایی
برای رمزگشایی میتوانید از طریق دستور زیر اقدام کنید:
gpg --output output.txt --decrypt myali.gpg You need a passphrase to unlock the secret key for user: "ali yeganeh.m (androidbreadcrumb) <yeganehaym@gmail.com>" 2048-bit RSA key, ID 533B7E96, created 2015-10-23 (main key ID 8708016A)
عبارت رمز را وارد کنید و حالا فایل output.txt را باز کنید:
ali@alipc:~$ cat output.txt hello ubuntu
به موضوع جالب و کاربردی ای اشاره فرمودید.
لطفا روش کار در هنگامی که ارتباط دو جدول به صورت یک به چند باشد و قصد بازیابی رکورهایی را از جدول اول در حالتی که حداقل یک رکورد در جدول دوم با شرط ما وجود داشته باشد را بیان فرمایید.
مثلا جدول کارمندان یک شرکت با شرکت هایی که هر فرد قبلا در آن سابقه کار داشته است.
میخواهیم کارمندانی را که در شرکت x کار کرده اند را به دست آوریم.
با تشکر از مطالب مفید شما.
نکته:
برای ایجاد یک پروژهی جدید مایکروسافت Web Application را به شما پیشنهاد میدهد. هرچند در این مبحث، مطالبی را مبنی بر فواید Web Site معرفی خواهد کرد، ولی اکثر توسعه دهندگان وب که Web Site را برگزیده اند سرانجام مضراتی از آن را مییابند که سنگینی آن بیشتر از فوایدش است. برای مثال تمامی خصیصههای (feature فیچر) ASP.net لزومآ برای وب سایت در دسترس نخواهند بود؛ مثلآ از ویژوال استودیوی 2012 به بعد، ابزاری برای تولید پروژههای وب وجود دارد که فقط برای Web Application در اختیار خواهد بود (برای کسب اطلاعات بیشتر میتوانید مطلب Creating an ASP.net Web Project in Visual Studio را مطالعه نمایید).
سناریو :
سناریویی که مبنی برا انتخاب Web Application میباشد به شرح زیر است:
· شما نیاز به استفاده از Edit And Continue در دیباگر ویژوال استودیو دارید.
· تمامی کدها، فایلها و کلاسهایی که با صفحات ASP.net مرتبط هستند، برای تست بصورت واحد و یکپارچه در نظر گرفته میشوند.
· شما برای کلاسهایی که وابسته به صفحات هستند و همچنین برای کنترلها و کلاسهای منحصر آن باید ارجاع داشته باشید.
· وابستگی در حالتی که چندین پروژهی مرتبط به هم را دارید توسط شما مشخص میشود.
· برای کل سایت در هنگام کامپایل فقط یک اسمبلی ساخته میشود.
· کنترل نام اسمبلیها و همچنین شمارهی ورژن ایجاد شدهی برای پروژه در دست شماست.
· برای کامپایل پروژه میتوانید MSBuild و یا Team Build را انتخاب کنید؛ برای مثال میتوانید مراحل Prebuild یا Postbuild را مشخص کنید.
· نیازی به قرار دادن سورس برنامه روی سرور نیست.
سناریویی که مبنی برا انتخاب Web Site میباشد به شرح زیر است:
· یک پروژه در بر دارندهی کدهای #C و هم کدهای Visual Basic میباشد ( درحالیکه بصورت پیشفرض در Web Application فایل پروژه بر مبنای زبان برنامهی شما کامپایل میشود، هرچند میتوان این حالت پیشفرض را تغییر داد؛ ولی این امر میتواند اندکی مشکل باشد).
· شما میتوانید سایت ایجاد شده را بصورت Real Time توسط FTP باز نموده و آپدیت نمایید.
· برای توزیع (deploy) پروژه مجبور به کامپایل صریح آن نیستید.
· اگر پروژه را کامپایل نمایید کامپایلر به ازای هر صفحه و یا هر پوشه، یک فایل اسمبلی جداگانه خواهد ساخت.
· برای تغییر یک فایل به تنهایی میتوانید فقط آنرا تغییر داده و بر روی سرور قرار دهید.
· حتی بعد از کامپایل هم میتوانید صفحات ASP.net را بدون نیاز به کامپایل دوبارهی کل سایت تغییر داده و جایگزین نمایید.
· سورس کامل پروژه برای اجرا باید روی سرور قرار گیرد.
تفاوتها در یک نگاه:
زمینه | پروژههای Web Application | پروژههای Web Site |
ساختار فایل پروژه | فایل برنامه (.csproj / vbproj) دربردارنده اطلاعاتی از جمله لیست فایلها و رفرنسها پروژه به پروژه دیگر خواهد بود. | هیچ فایل برنامه ای وجود ندارد و تمامی فایل هایی که داخل پوشه میباشند جزو فایلهای سایت شناخته میشوند. |
کامپایل | · شما پروژه را در سیستم خود کامپایل میکنید. · بصورت پیشفرض کامپایل کدها در یک اسمبلی قرار میگیرد. |
· سورس کدها بصورت اتوماتیک در سرور توسط Asp.net با اولین درخواست کامپایل میشوند. (البته شما میتوانید کامپایل را در سیستم خود نیز انجام دهید) · بصورت پیشفرض کامپایل برای هر کلاس یک اسمبلی جدا میسازد. |
فضاهای نام | Namespaceها بصورت صریح در صفحات و کلاسها و کنترلها افزوده میشود. | هیچ namespace ای بصورت پیشفرض اضافه نمیشود (شما میتوانید بصورت دستی آنها را اضافه کنید) |
توزیع | اسمبلی تولید شده در مرحله کامپایل را روی سرور قرار میدهید اکثر مراحل کامپایل توسط ابزارهای ارائه شده ویژوال استودیو انجام میشود. | کل سورس پروژه روی سرور قرار میگیرد. اکثر مراحل کامپایل توسط ابزارهای ارائه شده ویژوال استودیو انجام میشود. |
ساختار فایل پروژه:
پروژههای Web Application از فایل پروژه ویژوال استودیو ( .csproj / .vbproj ) برای نگهداری اطلاعات پروژه استفاده میکنند. با این امکان میتوان فایلهایی را که در پروژه دخیل هستند و یا باید کامپایل شوند، به تفکیک مشخص کرد.
در مورد Web Site تمامی فایلهایی که در داخل پوشهی برنامه قرار دارند، به صورت پیش فرض جزیی از برنامه تلقی شده و کامپایل خواهند شد و برای اینکه فایلی را بخواهید مستثنا کنید یا باید آنرا حذف کنید و یا پسوند آنرا به نامی که توسط سرور IIS قابل شناسایی نیست تغییر دهید.
فایدهی فایل پروژه یعنی همان ( .csproj / .vbproj ) در Web Application :
میتوان فایلی را به طور موقت از برنامه حذف کرد، بدون نگرانی از آنکه فایل بصورت کلی حذف شود. چرا که فایل در ساختار برنامه باقیست. برای مثال اگر صفحهای برای توزیع آماده نیست، میتوانید به راحتی آنرا از برنامه خارج کنید ( Exclude ) و برنامه را کامپایل نمایید و بعد از اینکه این صفحه هم آماده شد، دوباره آن را وارد پروژه نمایید ( include ) که اهمیت این امر در مواردی که از برنامههای کنترل سورس استفاده میکنید، دوچندان میشود.
فایدهی عدم استفاده از فایل پروژهی برنامه در Web Site :
شما مجبور به کنترل و شخصی سازی ساختار فایل برنامه در ویژوال استودیو نیستید و به راحتی هر فایل یا صفحهای را که میخواهید، با کپی کردن به پوشه و یا حذف کردن از آن توسط فایل اکسپلورر انجام میدهید.
کامپایل:
برای برنامههای Web Application شما بصورت معمول پروژه را Build مینمایید و تمامی کدهای صفحات و همچنین کلاسها به صورت یک فایل اسمبلی در پوشهی bin ذخیره میگردد.
برای Web Site شما مجبور به کامپایل دستی پروژه نیستید و میتوانید از Batch-Compile استفاده کنید و همچنین به ازای هر صفحه و کلاسریال شما یک فایل اسمبلی خواهید داشت.
مزایای کامپایل در Web Application :
· میتوانید از MSBuild استفاده کنید.
· میتوانید خصیصههای اسمبلی، از جمله نام و ورژن را به راحتی مدیریت نمایید.
· کامپایل قبل از توزیع برنامه این مزیت را دارد که کاربران مجبور نیستند منتظر کامپایل برنامه در سرور باشند.
· مدیریت دقیقی بر روی فایلها و ساختار برنامه و همچنین کلاسها و ارجاعات خواهید داشت.
مزایای کامپایل در Web Site :
· میتوانید هر صفحهای را که نیاز دارید بدون در نظر گرفتن آماده شدن دیگر صفحات تست و اجرا نمایید.
· آپدیت و جایگزینی فایلها به راحتی صورت میگیرد؛ چرا که اسمبلی تمام فایلها بصورت منحصر همان صفحه ایجاد خواهد شد.
· ایجاد شدن چند اسمبلی میتواند در برخی پروژهها به نفع برنامه بوده و performance را بالا ببرد. برای مثال در حالتیکه یک سایت با صفحات زیاد دارید و برخی صفحات به نسبت دیگر صفحات خیلی کمتر درخواست میشوند.
نکته:
هیچ فرقی بین Web Application , و web Site از نظر performance وجود ندارد مگر درحالت ذکر شده در بالا و در سایتهای خیلی بزرگ.
توزیع : ( Deployment )
در web Site کل فایلهای پروژه را بر روی سرور قرار میدهید؛ درحالی که در Web Application فایلهای برنامه بصورت اسمبلیها ( .dll ) روی سرور قرار میگیرند. همین امر میتواند در برخی حالتها مثلآ زمانی که از هاست share شده استفاده میکنید، خیال شما را از بابت سورس برنامه مطمئن سازد.
برای Web Site نیز این مزیت وجود دارد که برای انجام تغییرات کوچک مجبور به کامپایل و آپلود دوبارهی کل پروژه نیستید.
ماخذ
TFS یا GIT؟ از کدامیک استفاده کنم؟
شرح حال ابزارهای گزارشگیری موجود
اما هیچ کدوم به پای DevExpress XtraReports نمی رسند! این رو بدون اغراق می گم. تنها مشکلش عدم پشتیبانی از راست به چپ هست که چون مشتریش کمه برا راست به چپ پیاده سازی نمی کنند.
واقعا اگر امکانش بود قیمت یک میلیونیش رو هم می دادیم.
با استفاده از این کامپوننت یک برنامه گزارش سازی پویا تهیه کردم، امکاناتی که اون می داد فراتر از اونی هستند که تا حالا دیده بودم.
اما ابزارهای گزارش گیری اوپن سورس شاید زمان زیادی لازم باشه تا به قدرت ابزارهای تجاری برسند. البته این نظر منه.
مدتی است که سایت Stack Overflow دیتابیس سؤال و جوابهای خود را به صورتی سخاوتمندانه در اختیار عموم قرار داده است. مجوز استفاده از این اطلاعات cc-wiki است، به این معنا که مجاز هستید این اطلاعات را به اشتراک بگذارید (کپی، توزیع و امثال آن)، مجاز هستید این اطلاعات را با اطلاعاتی دیگر ترکیب کرده و کار جدیدی را ارائه دهید؛ با این شرط که فراموش نکنید از بانیان اصلی این کار یاد نموده و همچنین کار تولیدی شما نیز باید بر مبنای همین مجوز cc-wiki باقی بماند.
این دیتابیس که با فرمت xml ارائه شده در حقیقت دامپ اطلاعات عمومی سایت بوده که اطلاعات شخصی کاربران از آن حذف شده است و شامل فایلهای زیر میباشد:
1. badges.xml
2. comments.xml
3. posts.xml
4. users.xml
5. votes.xml
این اطلاعات شامل سایتهای همخانوادهی Stack Overflow، Server Fault ، Super Userو Meta Stack Overflow نیز میشود.
جهت دریافت آخرین نگارش این مجموعه به آدرس زیر میتوان مراجعه نمود:
حجم این اطلاعات چند گیگ میشود که جهت آشنایی با نحوهی import آن به SQL Server میتوان به مقالات زیر مراجعه نمود:
مقدمه:
شروع را با نصب ویژوال استودیوی نسخه رایگان 2013 برای وب و یا نسخهی 2013 آغاز میکنیم. برای راهنمایی استفاده ازDropbox, GitHub, Linkedin, Instagram, buffer salesforce STEAM, Stack Exchange, Tripit, twitch, Twitter, Yahoo و بیشتر اینجا کلیک کنید.توجه:
برای استفاده از Google OAuth 2 و دیباگ به صورت لوکال بدون اخطار SSL، شما میبایستی نسخهی ویژوال استودیو 2013 آپدیت 3 و یا بالاتر را نصب کرده باشید.ساخت اولین پروژه:
ویژوال استودیو را اجرا نماید. در سمت چپ بر روی آیکن Web کلیک کنید تا آیتم ASP.NET Web Application در دات نت 4.5.1 نمایش داده شود. یک نام را برای پروژه انتخاب نموده و OK را انتخاب نماید.در دیالوگ بعدی آیتم MVC را انتخاب و اطمینان داشته باشید Individual User Accounts که با انتخاب Change Authentication به صورت دیالوگ برای شما نمایش داده میشود، انتخاب گردیده و در نهایت بر روی OK کلیک کنید.
فعال نمودن حساب کاربری گوگل و اعمال تنظیمات اولیه:
در این بخش در صورتیکه حساب کاربری گوگل ندارید، وارد سایت گوگل شده و یک حساب کاربری را ایجاد نماید. در غیر اینصورت اینجا کلیک کنید تا وارد بخش Google Developers Console شوید.در بخش منو بر روی ایجاد پروژه کلیک کنید تا پروژهای جدید ایجاد گردد.
در دیالوگ باز شده نام پروژه خودتان را وارد کنید و دکمهی Create را زده تا عملیات ایجاد پروژه انجام شود. در صورتیکه با موفقیت پیش رفته باشید، این صفحه برای شما بارگزاری میگردد.
فعال سازی Google+API
در سمت چپ تصویر بالا آیتمی با نام APIs & auth خواهید دید که بعد از کلیک بر روی آن، زیر مجموعهای برای این آیتم فعال میگردد که میبایستی بر روی APIs کلیک و در این قسمت به جستجوی آیتمی با نام Google+ API پرداخته و در نهایت این آیتم را برای پروژه فعال سازید.
ایجاد یک Client ID :
در بخش Credentials بر روی دکمهی Create new Client ID کلیک نماید.
در دیالوگ باز شده از شما درخواست میشود تا نوع اپلیکشن را انتخاب کنید که در اینجا میبایستی آیتم اول (Web application ) را برای گام بعدی انتخاب کنید و با کلیک بر روی Configure consent screen به صفحهی Consent screen هدایت خواهید شد. فیلدهای مربوطه را به درستی پر کنید (این بخش به عنوان توضیحات مجوز ورود بین سایت شما و گوگل است).
در نهایت بعد از کلیک بر روی Save به صفحهی Client ID بازگشت داده خواهید شد که در این صفحه با این دیالوگ برخورد خواهید کرد.
پروژهی MVC خودتان را اجرا و لینک و پورت مربوطه را کپی کنید ( http://localhost:5063 ).
در Authorized JavaScript Origins لینک را کپی نماید و در بخش Authorized redirect URls لینک را مجدد کپی نماید. با این تفاوت که بعد از پورت signin-google را هم قرار دهید. ( http://localhost:5063/signin-google )
حال بر روی دکمهی Create Client ID کلیک کنید.
پیکربندی فایل Startup.Auth :
فایل web.config را که در ریشهی پروژه قرار دارد باز کنید. در داخل تگ appSettings کد زیر را کپی کنید. توجه شود بجای دو مقدار value، مقداری را که گوگل برای شما ثبت کرده است، وارد کنید.
<appSettings> <!--Google--> <add key="GoogleClientId" value="555533955993-fgk9d4a9999ehvfpqrukjl7r0a4r5tus.apps.googleusercontent.com" /> <add key="GoogleClientSecretId" value="QGEF4zY4GEwQNXe8ETwnVHfz" /> </appSettings>
فایل Startup.Auth را باز کنید و دو پراپرتی و یک سازندهی بدون ورودی را تعریف نماید. توضیحات بیشتر به صورت کامنت در کد زیر قرار گرفته است.
//فضا نامهای استفاده شده در این کلاس using System; using System.Configuration; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.Owin; using Microsoft.Owin; using Microsoft.Owin.Security.Cookies; using Microsoft.Owin.Security.Google; using Owin; using Login.Models; //فضا نام جاری پروژه namespace Login { /// <summary> /// در ریشه سایت فایلی با نام استارت آپ که کلاسی هم نام این کلاس با یک تابع و یک ورودی از نوع اینترفیس تعریف شده است ///که این دو کلاس به صورت پارشال مهروموم شده اند /// </summary> public partial class Startup { /// <summary> /// این پراپرتی مقدار کلایت ای دی رو از وب دات کانفیگ در سازنده بدون ورودی در خودش ذخیره میکند /// </summary> public string GoogleClientId { get; set; } /// <summary> /// این پراپرتی مقدار کلایت سیکرت ای دی رو از وب دات کانفیگ در سازنده بدون ورودی در خودش ذخیره میکند /// </summary> public string GoogleClientSecretId { get; set; } /// <summary> /// سازنده بدون ورودی /// به ازای هر بار نمونه سازی از کلاس، سازندههای بدون ورودی کلاس هر بار اجرا خواهند شد، توجه شود که میتوان از /// سازندههای استاتیک هم استفاده کرد، این سازنده فقط یک بار، در صورتی که از کلاس نمونه سازی شود ایجاد میگردد /// </summary> public Startup() { //Get Client ID from Web.Config GoogleClientId = ConfigurationManager.AppSettings["GoogleClientId"]; //Get Client Secret ID from Web.Config GoogleClientSecretId = ConfigurationManager.AppSettings["GoogleClientSecretId"]; } ///// <summary> ///// سازنده استاتیک کلاس ///// </summary> //static Startup() //{ //در صورتی که از این سازنده استفاده شود میبایست پراپرتیهای تعریف شده در سطح کلاس به صورت استاتیک تعریف گردد تا //بتوان در این سازنده سطح دسترسی گرفت // GoogleClientId = ConfigurationManager.AppSettings["GoogleClientId"]; // GoogleClientSecretId = ConfigurationManager.AppSettings["GoogleClientSecretId"]; //} // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 public void ConfigureAuth(IAppBuilder app) { // Configure the db context, user manager and signin manager to use a single instance per request app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); // Enable the application to use a cookie to store information for the signed in user // and to use a cookie to temporarily store information about a user logging in with a third party login provider // Configure the sign in cookie app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login"), Provider = new CookieAuthenticationProvider { // Enables the application to validate the security stamp when the user logs in. // This is a security feature which is used when you change a password or add an external login to your account. OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>( validateInterval: TimeSpan.FromMinutes(30), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) } }); app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process. app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); // Enables the application to remember the second login verification factor such as phone or email. // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from. // This is similar to the RememberMe option when you log in. app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); //Initialize UseGoogleAuthentication app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() { ClientId = GoogleClientId, ClientSecret = GoogleClientSecretId }); } } }
حال پروژه را اجرا کرده و به صفحهی ورود کاربر رجوع نمائید. همانگونه که در تصوبر زیر مشاهده میکنید، دکمهای با مقدار نمایشی گوگل در سمت راست، در بخش Use another service to log in اضافه شده است که بعد از کلیک بر روی آن، به صفحهی هویت سنجی گوگل ریداریکت میشوید.
در اینجا از کاربر سوال پرسیده میشود که آیا به سایت پذیرنده اجازه داده شود که اطلاعات و ایمیل شما ارسال گردند که بعد از انتخاب دکمهی Accept، لاگین انجام گرفته و اطلاعات ارسال میگردد.
توجه: رمز عبور شما به هیچ عنوان برای سایت پذیرنده ارسال نمیگردد.
لاگین با موفقیت انجام شد.
در مطلب بعدی سایر سایتهای اجتماعی قرار خواهند گرفت.