نمایش نتایج 1 تا 19 از 19

نام تاپیک: ساخت Feedback برا پروژه

  1. #1

    ساخت Feedback برا پروژه

    سلام، برا ساخت Feedback برا پروژه مث چیزی که Google Chrome داره، از چه روشی باید استفاده کرد؟ این مورد همون ارسال ایمیله؟ یا فرق داره؟ کلا روش اصولی اینکار چیه؟ یا اینطور بپرسم، بهترین روش اینکار چیه؟
    اگه همون داستان ارسال ایمیله، کدهایی تو نت من دیدم هم داستان داره؛ برا قسمت ایمیل دریافت کننده، ایمیل خودمو میدم، اما برا قسمت ایمیل ارسال کننده کاربر باید ایمیل خودشو وارد کنه، USER - PASS هم باید وارد کنه که خب من جای کاربر باشم تو خواب هم اینکارو نمیکنم! حالا فرض میکنیم که من برنامه نویس یه ایمیل برای نرم افزارم ایجاد میکنم ( و در تنظیمات ایمیل ام هم، گزینه "دسترسی به برنامه‌ با امنیت کمتر" رو هم فعال میکنم تا نرم افزار ام، به ایمیلم دسترسی داشته باشه )، اینطوری دیگه کاربر نیازی نداره که چیزی وارد کنه ( EMAIL - USER - PASS ) ولی آیا روش صحیح بحث Feedback یا همون ارسال پیام ( همراه با عکس یا اسناد دیگه ) به برنامه نویس همینه؟ خو اینطوری هک کردن ایمیل که کاری نداره که، پسورد هم که تو کدهای پروژه هستش، حتما میگید که هش اش کنم

    Untitled.png

    protected void SendMail(){
    //create mail message
    string from = "IslamicApplication1@gmail.com";
    string to = "mahdedamarchi@gmail.com";
    string subject = "Subject";
    string body = "<h1>Body</h1>";
    MailMessage mail = new MailMessage(from, to, subject, body)
    {
    IsBodyHtml = true,
    BodyEncoding = UTF8Encoding.UTF8,
    DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure,
    };


    //send the message
    string user = from;
    string pass = " :) ";
    SmtpClient smtp = new SmtpClient
    {
    Host = "smtp.gmail.com",
    Port = 587,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(user, pass),
    EnableSsl = true,
    Timeout = 10000,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    };
    smtp.SendCompleted += Smtp_SendCompleted;


    try
    {
    smtp.SendAsync(mail, mail);
    }
    catch (Exception ex)
    {
    Debug.WriteLine(ex.Message);
    }
    }


    private void Smtp_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {
    // Get the message we sent
    MailMessage msg = (MailMessage)e.UserState;


    if (e.Cancelled)
    {
    Debug.WriteLine("Cancelled");
    }
    if (e.Error != null)
    {
    Debug.WriteLine("Error");
    }
    else
    {
    Debug.WriteLine("Success");
    }


    // finally dispose of the message
    if (msg != null)
    msg.Dispose();
    }

  2. #2
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: ساخت Feedback برا پروژه

    سلام وقت بخیر.
    یکی از روشها اینه که یه وب سرویسی روی یه هاست ایجاد کنید و فیدبک کاربر رو از طریق اون توی دیتابیس خودتون تو هاست ذخیره کنید(یه هاست ارزون لینوکسی هم کارتون رو را میندازه). یا از طریق همین ایمیل که فرمودید البته خودم به شخصه توصیه نمیکنم

  3. #3

    نقل قول: ساخت Feedback برا پروژه

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    سلام، برا ساخت Feedback برا پروژه مث چیزی که Google Chrome داره، از چه روشی باید استفاده کرد؟ این مورد همون ارسال ایمیله؟ یا فرق داره؟ کلا روش اصولی اینکار چیه؟ یا اینطور بپرسم، بهترین روش اینکار چیه؟
    اگه همون داستان ارسال ایمیله، کدهایی تو نت من دیدم هم داستان داره؛ برا قسمت ایمیل دریافت کننده، ایمیل خودمو میدم، اما برا قسمت ایمیل ارسال کننده کاربر باید ایمیل خودشو وارد کنه، USER - PASS هم باید وارد کنه که خب من جای کاربر باشم تو خواب هم اینکارو نمیکنم! حالا فرض میکنیم که من برنامه نویس یه ایمیل برای نرم افزارم ایجاد میکنم ( و در تنظیمات ایمیل ام هم، گزینه "دسترسی به برنامه‌ با امنیت کمتر" رو هم فعال میکنم تا نرم افزار ام، به ایمیلم دسترسی داشته باشه )، اینطوری دیگه کاربر نیازی نداره که چیزی وارد کنه ( EMAIL - USER - PASS ) ولی آیا روش صحیح بحث Feedback یا همون ارسال پیام ( همراه با عکس یا اسناد دیگه ) به برنامه نویس همینه؟ خو اینطوری هک کردن ایمیل که کاری نداره که، پسورد هم که تو کدهای پروژه هستش، حتما میگید که هش اش کنم

    Untitled.png

    protected void SendMail(){
    //create mail message
    string from = "IslamicApplication1@gmail.com";
    string to = "mahdedamarchi@gmail.com";
    string subject = "Subject";
    string body = "<h1>Body</h1>";
    MailMessage mail = new MailMessage(from, to, subject, body)
    {
    IsBodyHtml = true,
    BodyEncoding = UTF8Encoding.UTF8,
    DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure,
    };


    //send the message
    string user = from;
    string pass = " :) ";
    SmtpClient smtp = new SmtpClient
    {
    Host = "smtp.gmail.com",
    Port = 587,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(user, pass),
    EnableSsl = true,
    Timeout = 10000,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    };
    smtp.SendCompleted += Smtp_SendCompleted;


    try
    {
    smtp.SendAsync(mail, mail);
    }
    catch (Exception ex)
    {
    Debug.WriteLine(ex.Message);
    }
    }


    private void Smtp_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {
    // Get the message we sent
    MailMessage msg = (MailMessage)e.UserState;


    if (e.Cancelled)
    {
    Debug.WriteLine("Cancelled");
    }
    if (e.Error != null)
    {
    Debug.WriteLine("Error");
    }
    else
    {
    Debug.WriteLine("Success");
    }


    // finally dispose of the message
    if (msg != null)
    msg.Dispose();
    }
    سلام برای ارسال و دریافت فیدبک باید از API استفاده کنید.

  4. #4

    نقل قول: ساخت Feedback برا پروژه

    نقل قول نوشته شده توسط رامین مرادی مشاهده تاپیک
    یکی از روشها اینه که یه وب سرویسی روی یه هاست ایجاد کنید و فیدبک کاربر رو از طریق اون توی دیتابیس خودتون تو هاست ذخیره کنید(یه هاست ارزون لینوکسی هم کارتون رو را میندازه). یا از طریق همین ایمیل که فرمودید البته خودم به شخصه توصیه نمیکنم
    یعنی میگید همین کد بالا، بجایی این که از گوگل استفاده کنم، از ایمیل هاستم استفاده کنم؟
    الان یه ایمیل تو هاستم ساختم و با PORT = 587 ایمیل ارسال کردم و ارسال شد ( که خب این پورت SSL نی، پورت SSL برابر 465 هستش که هرکاری کردم نتونستم باهاش ایمیل ارسال کنم )؛ حالا از ایمیل هاست خودم استفاده کنم یا از ایمیل GMAIL، چه فرقی داره؟

    سلام برای ارسال و دریافت فیدبک باید از API استفاده کنید.
    API رو دقیقا متوجه نشدم.

  5. #5
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: ساخت Feedback برا پروژه

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    یعنی میگید همین کد بالا، بجایی این که از گوگل استفاده کنم، از ایمیل هاستم استفاده کنم؟
    الان یه ایمیل تو هاستم ساختم و با PORT = 587 ایمیل ارسال کردم و ارسال شد ( که خب این پورت SSL نی، پورت SSL برابر 465 هستش که هرکاری کردم نتونستم باهاش ایمیل ارسال کنم )؛ حالا از ایمیل هاست خودم استفاده کنم یا از ایمیل GMAIL، چه فرقی داره؟


    API رو دقیقا متوجه نشدم.
    نه ایمیل رو کلا بیخیال بشید هم به خاطر مسائل امنیتش هم اینکه ممکنه به هر دلیلی سرویس دهنده ش مثلا پورتش یا آدرس سرورش تغییر بکنه مخصوصا هاست های شخصی.
    شما با استفاده از یک زبان تحت وب مثل php میاید و وب سرویس کوچیکی رو طرای میکنید و اطلاعات رو از نرم افزارتون به اون وب سرویس میفرستید. بعد داخل وب سرویستون اون اطلاعات رو در دیتابیس ذخیره میکنید تا بتونید بعدا ازش استفاده کافی رو ببرید.

  6. #6

    نقل قول: ساخت Feedback برا پروژه

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    یعنی میگید همین کد بالا، بجایی این که از گوگل استفاده کنم، از ایمیل هاستم استفاده کنم؟
    الان یه ایمیل تو هاستم ساختم و با PORT = 587 ایمیل ارسال کردم و ارسال شد ( که خب این پورت SSL نی، پورت SSL برابر 465 هستش که هرکاری کردم نتونستم باهاش ایمیل ارسال کنم )؛ حالا از ایمیل هاست خودم استفاده کنم یا از ایمیل GMAIL، چه فرقی داره؟


    API رو دقیقا متوجه نشدم.
    همون چیزی که اقای رامین مرادی گفتن:
    لینک زیر یه API هستش که اگر پارامتر های اون رو کامل کنیم (apikey مثل رمز عبور میمونه، و t اسم یه فیلم باید باشه) وقتی این لینک روش کلیک بشه اون اسم فیلم و رمز عبور به برنامه تحت وب ارسال میشه بعدش نتیجه اون که مشخصات هست در قالب json برمیگرده:

    www.omdbapi.com/?t=arrow&apikey=xxxxxx

  7. #7

    نقل قول: ساخت Feedback برا پروژه

    پس من برم با PHP یه کدی بزنم که داده رو از برنامم بگیره، و بعد در دیتابیس MYSQL ام ذخیره کنه، یا این که همونجا که داده رو گرفت هاستم، درجا داده رو به ایمیل از قبل تعریف شده، ایمیل کنه - اینو پیگیری میکنم و نتیجه رو همینجا اعلام میکنم.

    یه موردی، امکان ارتباط Microsoft SQL Server با دیتابیس هاست هستش؟ یا به عبارتی یه دیتابیسی که تو هاست ( محیط اینترنت، آنلاین ) قرار داره، و از طریق C#‎‎‎‎ بهش دسترسی داشته باشیم ( اینطوری دیگه فک کنم نیازی به PHP و اینجور چیزا باشه )
    توجه : دیتابیسی که رو هاست هستش فک کنم mysql باشه.
    کلا امکان مدیریت دیتابیس mysql هاست ( که رو سایت قرار داره ) از طریق C#‎‎‎‎ هستش؟

    ----

    با پشتیبانی هاستم تماس گرفتم، گفتن هاست شما امکان ریموت کنترل کردن دیتابیس غیرفعال هستش به دلایل امنیتی، برا این مورد باید سرور مجازی بگیری که ماهی 1 تومن هزینشه اصلا چه کاریه که دیتابیس هاست رو با سیشارپ کنترل کنیم.
    آخرین ویرایش به وسیله md3848 : پنج شنبه 02 اردیبهشت 1400 در 21:49 عصر

  8. #8

    نقل قول: ساخت Feedback برا پروژه

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    پس من برم با PHP یه کدی بزنم که داده رو از برنامم بگیره، و بعد در دیتابیس MYSQL ام ذخیره کنه، یا این که همونجا که داده رو گرفت هاستم، درجا داده رو به ایمیل از قبل تعریف شده، ایمیل کنه - اینو پیگیری میکنم و نتیجه رو همینجا اعلام میکنم.

    یه موردی، امکان ارتباط Microsoft SQL Server با دیتابیس هاست هستش؟ یا به عبارتی یه دیتابیسی که تو هاست ( محیط اینترنت، آنلاین ) قرار داره، و از طریق C#‎‎‎‎‎ بهش دسترسی داشته باشیم ( اینطوری دیگه فک کنم نیازی به PHP و اینجور چیزا باشه )
    توجه : دیتابیسی که رو هاست هستش فک کنم mysql باشه.
    کلا امکان مدیریت دیتابیس mysql هاست ( که رو سایت قرار داره ) از طریق C#‎‎‎‎‎ هستش؟

    ----

    با پشتیبانی هاستم تماس گرفتم، گفتن هاست شما امکان ریموت کنترل کردن دیتابیس غیرفعال هستش به دلایل امنیتی، برا این مورد باید سرور مجازی بگیری که ماهی 1 تومن هزینشه اصلا چه کاریه که دیتابیس هاست رو با سیشارپ کنترل کنیم.
    اکثرا قابلیت ریموت روی هاست غیرفعاله، شما یکاری کن یه اکانت تو گیتهاب باز کن یه مخزن برای پروژه ایجاد کن و از قسمت Issue برای دریافت فیدبک استفاده کن، از طریق API سایت گیتهاب میتونی انجام بدی اون کلید API رو هم میتونی هش و رمز نگاری و این چیزا بکنی که از لحاظ امنیت مشکلی پیش نیاد.

  9. #9

    نقل قول: ساخت Feedback برا پروژه

    خب اینم از API یی که گفتید، کدشو زدم، همین منظورتون بود یا روش دیگه ای؟

    کد سمت C#‎‎‎‎‎ : تابع ارسال دیتا به صفحه وب، که یه داده با نام API داره ( که همون پسورد هستش، برا این که هر ننه قمری نتونه داده ارسال کنه به صفحه وب من )، و داده هایی با نام : نام/ایمیل/عنوان/پیغام؛ که خب کاربر اگه دوست داشت اسمشو و ایمیلشو وارد میکنه ( دقیقا مثل قسمت نظرات سایت ها و وبلاگ ها )، عنوان پیغامشو وارد کنه و محتوای پیغامشو وارد میکنه.
            private string SendDataToWebpage()        {
    string response = "";

    try
    {
    string url = "https://dmf313.ir/IslamicApp/index.php";
    string dataStr = string.Format("API={0}&Name={1}&Email={2}&Title={3 }&Message={4}", "Z4s!JF6b3?Ycu4!$", "Mahdi", "1@2.3", "Test Title", "Test Message");
    byte[] dataByte = Encoding.UTF8.GetBytes(dataStr);


    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
    webRequest.Method = "POST";
    webRequest.ContentType = "application/x-www-form-urlencoded";
    webRequest.ContentLength = dataByte.Length;


    // send data
    using (Stream webpageStream = webRequest.GetRequestStream())
    {
    webpageStream.Write(dataByte, 0, dataByte.Length);
    }


    // read response
    using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
    {
    using (StreamReader reader = new StreamReader(webResponse.GetResponseStream()))
    {
    response = reader.ReadToEnd();
    }
    }
    }
    catch (Exception ex)
    {
    Debug.WriteLine(ex.Message);
    }


    Debug.WriteLine("response = " + response);


    return response;
    }


    کد سمت وب ( PHP ) : اگه API یا همون پسورد صحیح بود ( که خب همیشه صحیح هستش چون خودم کدشو نوشتم )، میاد داده های فوق رو به ایمیل از قبل تعریف شده در کد PHP، ارسال میکنه؛ یه متنی هم به عناون پاسخ ارسال میکنه سمت برنامه C#‎‎‎ تا نرم افزارمون چشم به راه نمونه
    <?php$Pass = "Z4s!JF6b3?Ycu4!$"; // API [ Password ]
    $Response = "";
    $EmailTo = "mahdedamarchi@gmail.com"; // Send email to this address!


    // Read Data
    $API = $_POST["API"];
    $Name = $_POST["Name"];
    $EmailFrom = $_POST["Email"];
    $Title = $_POST["Title"];
    $Message = $_POST["Message"];


    // if password correct -> Send Email
    if ($API == $Pass)
    {
    $content = "<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>نام : </span>".$Name."</p>".
    "<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>ایمیل : </span>".$EmailFrom."</p>".
    "<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>عنوان : </span>".$Title."</p>".
    "<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>پیغام : </span>".$Message."</p>";


    $headers = "From: wordpress@dmf313.ir" . "\n" . "Content-Type: text/html; charset=UTF-8" . "\r\n";


    if (filter_var($EmailTo, FILTER_VALIDATE_EMAIL)) { // this line checks that we have a valid email address
    $status = mail($EmailTo, $Title, $content, $headers); // This method sends the mail.


    if( $status == true ) {
    $Response = "Email Send";
    }
    else {
    $Response = "Error Send Email";
    }
    }
    else {
    $Response = "Incorrect Email";
    }
    }
    else
    {
    $Response = "API is inCorrect";
    }


    // Send Response
    echo $Response;


    ?>



    نتیجه : اینم یه عکس از نمونه ایمیل ارسال شده :
    Untitled.png



    سوال : 1) همین منظورتون بود؟ 2) این کدهای من مشکلی چیزی ندارن؟ مخصوصا از نظر امنیتی! 3) نظری پیشنهادی چیزی بود حتما بگید لطفا.

  10. #10

    نقل قول: ساخت Feedback برا پروژه

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    خب اینم از API یی که گفتید، کدشو زدم، همین منظورتون بود یا روش دیگه ای؟

    کد سمت C#‎‎‎‎‎‎ : تابع ارسال دیتا به صفحه وب، که یه داده با نام API داره ( که همون پسورد هستش، برا این که هر ننه قمری نتونه داده ارسال کنه به صفحه وب من )، و داده هایی با نام : نام/ایمیل/عنوان/پیغام؛ که خب کاربر اگه دوست داشت اسمشو و ایمیلشو وارد میکنه ( دقیقا مثل قسمت نظرات سایت ها و وبلاگ ها )، عنوان پیغامشو وارد کنه و محتوای پیغامشو وارد میکنه.
            private string SendDataToWebpage()        {
    string response = "";

    try
    {
    string url = "https://dmf313.ir/IslamicApp/index.php";
    string dataStr = string.Format("API={0}&Name={1}&Email={2}&Title={3 }&Message={4}", "Z4s!JF6b3?Ycu4!$", "Mahdi", "1@2.3", "Test Title", "Test Message");
    byte[] dataByte = Encoding.UTF8.GetBytes(dataStr);


    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
    webRequest.Method = "POST";
    webRequest.ContentType = "application/x-www-form-urlencoded";
    webRequest.ContentLength = dataByte.Length;


    // send data
    using (Stream webpageStream = webRequest.GetRequestStream())
    {
    webpageStream.Write(dataByte, 0, dataByte.Length);
    }


    // read response
    using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
    {
    using (StreamReader reader = new StreamReader(webResponse.GetResponseStream()))
    {
    response = reader.ReadToEnd();
    }
    }
    }
    catch (Exception ex)
    {
    Debug.WriteLine(ex.Message);
    }


    Debug.WriteLine("response = " + response);


    return response;
    }


    کد سمت وب ( PHP ) : اگه API یا همون پسورد صحیح بود ( که خب همیشه صحیح هستش چون خودم کدشو نوشتم )، میاد داده های فوق رو به ایمیل از قبل تعریف شده در کد PHP، ارسال میکنه؛ یه متنی هم به عناون پاسخ ارسال میکنه سمت برنامه C#‎‎‎‎ تا نرم افزارمون چشم به راه نمونه
    <?php$Pass = "Z4s!JF6b3?Ycu4!$"; // API [ Password ]
    $Response = "";
    $EmailTo = "mahdedamarchi@gmail.com"; // Send email to this address!


    // Read Data
    $API = $_POST["API"];
    $Name = $_POST["Name"];
    $EmailFrom = $_POST["Email"];
    $Title = $_POST["Title"];
    $Message = $_POST["Message"];


    // if password correct -> Send Email
    if ($API == $Pass)
    {
    $content = "<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>نام : </span>".$Name."</p>".
    "<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>ایمیل : </span>".$EmailFrom."</p>".
    "<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>عنوان : </span>".$Title."</p>".
    "<p style=' font-size: 16px; ' ><span style=' font-weight: bold; color: red; font-size: 18px; '>پیغام : </span>".$Message."</p>";


    $headers = "From: wordpress@dmf313.ir" . "\n" . "Content-Type: text/html; charset=UTF-8" . "\r\n";


    if (filter_var($EmailTo, FILTER_VALIDATE_EMAIL)) { // this line checks that we have a valid email address
    $status = mail($EmailTo, $Title, $content, $headers); // This method sends the mail.


    if( $status == true ) {
    $Response = "Email Send";
    }
    else {
    $Response = "Error Send Email";
    }
    }
    else {
    $Response = "Incorrect Email";
    }
    }
    else
    {
    $Response = "API is inCorrect";
    }


    // Send Response
    echo $Response;


    ?>



    نتیجه : اینم یه عکس از نمونه ایمیل ارسال شده :
    Untitled.png



    سوال : 1) همین منظورتون بود؟ 2) این کدهای من مشکلی چیزی ندارن؟ مخصوصا از نظر امنیتی! 3) نظری پیشنهادی چیزی بود حتما بگید لطفا.
    دقیقا منظورمون همین بود
    فقط یه نکته به جای httpwebrequest از httclient استفاده کنید هم ساده تره هم مخصوص کار با api هستش
    C#‎ - How to make an HTTP POST web request - Stack Overflow

  11. #11

    نقل قول: ساخت Feedback برا پروژه

    حالا یه موردی، چطوری برای هر کاربر api مخصوص بهشو ایجاد کنم؟ یا این که از یه پسورد یا همون api ثابت برا همه کاربرا استفاده کنم؟ کاربرا نیازی به login شدن یا ساخت حساب برای برنامه ندارد

    اینم با کلاسی که شما گفتید - تست کردم جواب داد - بنظر بهتر میاد، ولی کاش میشد وقفه ای چیزی میداشت و ازش استفاده میکردم، مثلا وقفه/event دریافت داده یا همون response :
    private static readonly HttpClient client = new HttpClient();private async System.Threading.Tasks.Task<string> SendDataToWebpage_HttpClient()
    {
    string url = "https://dmf313.ir/IslamicApp/index.php";


    var values = new Dictionary<string, string>
    {
    { "API", "abcd!" },
    { "Name", "Mahdi" },
    { "Email", "1@2.3" },
    { "Title", "Test Title" },
    { "Message", "Test Message" },
    };
    var content = new FormUrlEncodedContent(values);


    var response = await client.PostAsync(url, content);


    var responseString = await response.Content.ReadAsStringAsync();


    Debug.WriteLine("response = " + responseString);


    return responseString;
    }
    آخرین ویرایش به وسیله md3848 : جمعه 03 اردیبهشت 1400 در 13:45 عصر

  12. #12

    نقل قول: ساخت Feedback برا پروژه

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    حالا یه موردی، چطوری برای هر کاربر api مخصوص بهشو ایجاد کنم؟ یا این که از یه پسورد یا همون api ثابت برا همه کاربرا استفاده کنم؟ کاربرا نیازی به login شدن یا ساخت حساب برای برنامه ندارد

    اینم با کلاسی که شما گفتید - تست کردم جواب داد - بنظر بهتر میاد، ولی کاش میشد وقفه ای چیزی میداشت و ازش استفاده میکردم، مثلا وقفه/event دریافت داده یا همون response :
    private static readonly HttpClient client = new HttpClient();private async System.Threading.Tasks.Task<string> SendDataToWebpage_HttpClient()
    {
    string url = "https://dmf313.ir/IslamicApp/index.php";


    var values = new Dictionary<string, string>
    {
    { "API", "abcd!" },
    { "Name", "Mahdi" },
    { "Email", "1@2.3" },
    { "Title", "Test Title" },
    { "Message", "Test Message" },
    };
    var content = new FormUrlEncodedContent(values);


    var response = await client.PostAsync(url, content);


    var responseString = await response.Content.ReadAsStringAsync();


    Debug.WriteLine("response = " + responseString);


    return responseString;
    }
    همون api ثابت خوبه نیازی به تولید api برای هر کاربر نیست
    من متوجه منظورتون از وقفه نشدم ولی اگر منظورتون اینه که چک کنید عملیات موفقیت امیز بوده یا نه میتونید از کد زیر استفاده کنید
    response.EnsureSuccessStatusCode();
    اگر عملیات درست پیش نره اینجا اکسپشن میگیره و جلوتر نمیره

  13. #13
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: ساخت Feedback برا پروژه

    نقل قول نوشته شده توسط md3848 مشاهده تاپیک
    حالا یه موردی، چطوری برای هر کاربر api مخصوص بهشو ایجاد کنم؟ یا این که از یه پسورد یا همون api ثابت برا همه کاربرا استفاده کنم؟ کاربرا نیازی به login شدن یا ساخت حساب برای برنامه ندارد

    اینم با کلاسی که شما گفتید - تست کردم جواب داد - بنظر بهتر میاد، ولی کاش میشد وقفه ای چیزی میداشت و ازش استفاده میکردم، مثلا وقفه/event دریافت داده یا همون response :
    private static readonly HttpClient client = new HttpClient();private async System.Threading.Tasks.Task<string> SendDataToWebpage_HttpClient()
    {
    string url = "https://dmf313.ir/IslamicApp/index.php";


    var values = new Dictionary<string, string>
    {
    { "API", "abcd!" },
    { "Name", "Mahdi" },
    { "Email", "1@2.3" },
    { "Title", "Test Title" },
    { "Message", "Test Message" },
    };
    var content = new FormUrlEncodedContent(values);


    var response = await client.PostAsync(url, content);


    var responseString = await response.Content.ReadAsStringAsync();


    Debug.WriteLine("response = " + responseString);


    return responseString;
    }

    اسم سایتتون رو دیدم تازه فهمیدم کی هستید مهندس ارادت داریم خدمتتون از پروژه هاتون بهره کافی رو میبریم. همینجا گفتم یه تشکری ازتون بکنم

    اگه برنامتون زیاد حساس نیست همون ثابت کافیه مگر اینکه نگران اسپم باشید. اینجور مواقع استفاده ز نام کاربری یا ایجاد یه توکن میتونه راه گشا باشه. ولی در کل این مورد رو بیشتر تو اپلیکیشن ها دیدم استفاده کنن یا سامانه هایی که به مشتریا میدن و بابت خدماتشون هزینه دریافت میکنن. وگرنه وب سرویس های رایگان ندیدم از توکن استفاده کنن. در کل خودتونم میتونید یه الگوریتم بنویسید برای احرراز هویت. مثلا شناسه سخت افزاری شخصی که نرم افزارتون رو خریده و موقع دریافت فیدبک شناسه رو هم چک کنید ببینید مشتریتون این فیدبک رو فرستاده یا نه در کل تو برنامه نویسی n تا راه هست براش(به قول اون دیالوگ معروف *به تعداد آدمها راه برای رسیدن به خدا هست.)



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

  14. #14

    نقل قول: ساخت Feedback برا پروژه

    0
    من متوجه منظورتون از وقفه نشدم ولی اگر منظورتون اینه که چک کنید عملیات موفقیت امیز بوده یا نه میتونید از کد زیر استفاده کنید
    response.EnsureSuccessStatusCode();
    از این کد استفاده کردم، فک کنم فرقی نداشته باشه با کد بالایی، البته امیدوارم.
    if (httpResponseMessage.StatusCode == HttpStatusCode.OK)


    1

    نقل قول نوشته شده توسط رامین مرادی مشاهده تاپیک
    یه توصیه هم چون به صورت ایمیل میخواید بفرستید حواستون به هاست باشه که بعضی از هاست ها محدودیت تعداد ارسال ایمیل داره. همچنین اگه احراز هویت نکنید یا توکن نزارید این آدرس لو بره یه از خدا بیخبری میاد و هی به این وب سرویس درخواست میفرسته و سیستم شروع به ارسال ایمیلهای تکراری میکنه و دامنتون به عنوان اسپم شناخته میشه و دیگه میرید تو بلک لیست مثلا گوگل.
    آره بیشتر نگران همین هستم، البته نگران رفتن تو بلک لیست شرکت ارائه دهنده هاست! چون ایمیلا در روز از یه تعدادی بیشتر بشه مسدود میکنن و میگن باید سرویس ایمیل بخری که اونم ماهانه یه مقداری باید به شرکت داد ( تجربه این مشکلو قبلا داشتم )، لیست سیاه گوگل هم که...

    2
    این نمونه داده ای که من به کمک متد post با C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ارسال کردم و به کمک نرم افزار HHTP Debugger داده هاشو بدست ابردم که خب پسورد هم شاملش میشه ( البته بعضی کاراکتر ها رو اومده به فرمت HEX نمایش داده مثلا ! و ؟، حالا چرا نمیدونم ولی در کل تو NODEPAD پایین پسوردو خودم بدست ابردم که کار ساده ای هم هستش! متاسفانه ) : مارو باش که فک میکردیم متد POST از GET بهتره و کسی به داده هاش دسترسی نداره یعنی هر داده ای که من ارسال کنم هر کسی میتونه بهش دسترسی داشته باشه.

    2.jpg

    1.png



    3
    اگه برنامتون زیاد حساس نیست همون ثابت کافیه مگر اینکه نگران اسپم باشید. اینجور مواقع استفاده ز نام کاربری یا ایجاد یه توکن میتونه راه گشا باشه. ولی در کل این مورد رو بیشتر تو اپلیکیشن ها دیدم استفاده کنن یا سامانه هایی که به مشتریا میدن و بابت خدماتشون هزینه دریافت میکنن. وگرنه وب سرویس های رایگان ندیدم از توکن استفاده کنن. در کل خودتونم میتونید یه الگوریتم بنویسید برای احرراز هویت. مثلا شناسه سخت افزاری شخصی که نرم افزارتون رو خریده و موقع دریافت فیدبک شناسه رو هم چک کنید ببینید مشتریتون این فیدبک رو فرستاده یا نه
    جدا هنگ کردم نمیدونم از چه روشی استفاده کنم که جلو SPAM شدن رو بگیرم؛ اولا نرم افزار رایگانه، نیازی به ساخت اکانت هم نی، مگه این که من برنامه نویس برای هر کاربر یه اکانت ایجاد کنم، مثلا نام کاربریش بشه CPU ID و پسورد بشه یه فرمولی که توش CPU ID دخیله؛ ولی خب بازم هر کاری بکنم و هر نوع داده ای هم ارسال بکنم بازم به کمک HHTP Debugger ها میشه به داده دسترسی پیدا کرد و همون داده رو SPAM کرد! الان واقعا نمیدونم باید چیکار کنم برا حل این مشکل مگه این که پسوردی رو ارسال کرد که هر بار در هر درخواستی که ارسال میشه توسط C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎، این پسورد تغییر کنه، اینطوری طرف با SPAM کردن اون درخواست با اون دیتایی که داره، موفق به SPAM نمیشه، فعلا بهترین ایده و تنها ترین ایده کاربردی فک کنم همین باشه، درست میگم یا روش بهتری هم هستش؟


    4
    یکم سرچ کردم توکن / Token رو هم دقیقا نفهمیدم چی هست و چطور کار میکنه، حالا بیشتر مطالعه میکنم ببینم چی هس و چطور میتونه کمکم کنه، نتیجه رو همینجا میگم.
    مطالب مرتبط :
    SecurityToken Class
    How to: Create a Custom Token
    آخرین ویرایش به وسیله md3848 : شنبه 04 اردیبهشت 1400 در 17:40 عصر

  15. #15
    کاربر دائمی
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    ایران
    پست
    372

    نقل قول: ساخت Feedback برا پروژه

    خب اول بررسی کن ببین سرتیفیکیت HHTP Debugger در لیست سرتیفیکیتها هست یا نه(با کد نویسی)

    اگه بود حذفش کن(با کد نویسی) اینطوری تا وقتی HHTP Debugger باز باشه دسترسی به نت نداره

    cert.PNG

  16. #16

    نقل قول: ساخت Feedback برا پروژه

    یه سوال، منظور از token این مقداری هستش که در کد زیر اعمال کردم؟
    // set Authorizationvar 
    byteArray = Encoding.ASCII.GetBytes("user1:pass1");
    client.DefaultRequestHeaders.Authorization =
    new System.Net.Http.Headers.AuthenticationHeaderValue(
    "Basic",
    Convert.ToBase64String(byteArray));

    خب این Authorization هم قابل مشاهده هستش توسط http debuger.

    Untitled.png

    که خب سمت php، یوزر پس داخل Authorization توسط کد زیر خونده میشه :
    $_SERVER['PHP_AUTH_USER']
    $_SERVER['PHP_AUTH_PW']

    لینک فایل php، رو هم تو مرورگر باز کنیم به صورت زیر نمایش داده میشه که همون اول تقاضای یوزر-پس میکنه :

    Untitled2.png

    ------------------

    خب من دارم کم کم هنگ میکنم، خب یه مرور کنیم، الان من مشکل spam شدن درخواست Feedback ( که خب درخواست ارسال میشه به وب، و اونجا میاد درخواستو میخونه و به ایمیل از قبل تعریف شده، اطلاعاتو ایمیل میکنه، کل داستان همینه ) رو دارم تا هاست و گوگل برام مشکل ایجاد نکنن، خب حالا بخوام جلو spam رو بگیرم باید هر کاربر واقعا 1 کاربر باشه و هر کاربری که از نرم افزار استفاده میکنه، یه کد خاص داشته باشه، و رو اون کد خاص من محدودیت اعمال کنم که مثلا هر روز میتونه حداکثر 10 تا ایمیل ارسال کنه اونم با فاصله زمانی 5 دقیقه مثلا.
    خب اگه من بیام از کد ثابت استفاده کنم چی میشه؟ خب دیگه باید با بحث ایجاد محدودیت 10 تا ایمیل در روز و این داستانا خدا حافظی کرد! ولی اگه هر کاربر کد مخصوص خودشو داشته باشه ( که انگار بهش میگن TOKEN ) دیگه بحث ایجاد محدودیت کار قابل انجام و قابل عملیاتی شدن و ساده ای بنظر میاد؛ خب حالا باید این داستان ایجاد TOKEN طوری باشه که کسی به فرمولش پی نتونه ببره تا به کمک فرمول فوق، بیاد شونصد تا TOKEN برا خودش ایجاد کنه و مشکلاتی رو ایجاد کنه که کمترینش SPAM شدن درخواست ها هستش، ( و اگه نرم افزار پولی باشه و کاربر بابت امکانی که ازش استفاده میکنه پول میده که بدتر، ولی خب نرمافزار ما رایگان هستش و فقط مشکل با بحث SPAM شدن هستش فعلا ) ---> فلذا من باید رو بحث ایجاد TOKEN قابل اعتماد! تمرکز کنم، این توکن هم در قسمت Authorization ( که در بالای بهش اشاره کردم ) یا داخل content میتونه قرار بگیره و سمت PHP بعد پردازشش میشه کرد.... اینایی که گفتم درست بود؟ درست متوجه داستان شدم؟

    -------------

    دو نوع توکن داریم ( Refresh Tokens: When to Use Them and How They Interact with JWTs ) :
    1) Access tokens : که نیاز به سرور ندارن!
    2) Access tokens : که نیاز به سرور دارن!!
    آخرین ویرایش به وسیله md3848 : یک شنبه 05 اردیبهشت 1400 در 05:59 صبح

  17. #17
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: ساخت Feedback برا پروژه

    برا توکن بهتره هرکی نرم افزار رو نصب میکنه یه یوزر پس بدید بهش حالا از طریق ثبت نام یا هرچیزی.
    بعد که کاربر با اون یوزر برنامتون رو باز میکنه هر لحظه که میخواد یه فیدبک براتون بفرسته یک شناسه خاص چند رقمی ایجاد کنید که الگوریتم اونو خودتون میدونید. بعد تو سرور همون لحظه شناسه رو بررسی کنید اگه با الگوریتمتون سازگار بود و با اون یوزر پسی که به کاربر دادید جور دراومد اقدام به ارسال ایمیل کنید.

    درضمن من هنوز نمیدونم چرا میخواید از ایمیل استفاده کنید؟!!! چجوری میخواید از این ایمیل ها آمارگیری کنید یا مثلا نظرات رو دسته بندی کنید یا مدیریت کنید؟؟؟
    بهتر نیست تو همون هاست یه دیتابیس بسازید و اونجا ذخیره کنید؟ اینجوری گزارش گیری هم براتون راحت تر میشه.

  18. #18
    کاربر دائمی
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    ایران
    پست
    372

    نقل قول: ساخت Feedback برا پروژه

    شما که از وردپرس استفاده میکنید یه پلاگین کپچا نصب کنید و ...

    حالا اگه کد کپچای ارسالی از طرف کاربر درست باشه پیام ثبت میشه

    ----------------------------------------------------------------------------------------
    شما که نگران اسپم هستید پس چرا قسمت نظرات سایت کپچا نداره؟

  19. #19

    نقل قول: ساخت Feedback برا پروژه

    قدم اول ببینید چطور میشه هر کاربر را شناخت.
    بعد ، وقتی شخص نیاز به ارسال فیدبک داشت بایست از سرور ، توکن با طول عمر مشخص دریافت بشه. پس در سرور باید اطلاعات درخواست کننده توکن همراه توکن تولیدی و تاریخ و زمان ذخیره بشه. بعد با ارسال هر فیدبک باید چک بشه آخرین ارسال اون شخص کی بوده. اگر مجاز بود ذخیره بشه.

تاپیک های مشابه

  1. سوال: یک سوال درباره Shell و Feedback آن
    نوشته شده توسط mpmsoft در بخش برنامه نویسی در 6 VB
    پاسخ: 7
    آخرین پست: دوشنبه 28 مرداد 1387, 12:55 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •