Avatar billede Driton Seniormester
03. juli 2016 - 00:08 Der er 12 kommentarer

Facebook log ind

Jeg får en

The remote server returned an error: (400) Bad Request.

Min kode ser sådan her ud

Uri targetUri = new Uri("https://graph.facebook.com/oauth/access_token?client_id=" + ConfigurationManager.AppSettings["FacebookAppId"] + "&client_secret=" + ConfigurationManager.AppSettings["FacebookAppSecret"] + "&redirect_uri=http://" + Request.ServerVariables["SERVER_NAME"] + ":" + Request.ServerVariables["SERVER_PORT"] + "/Logind.aspx&code=" + code);

HttpWebRequest at = HttpWebRequest)HttpWebRequest.Create(targetUri);

System.IO.StreamReader str = new System.IO.StreamReader(at.GetResponse().GetResponseStream());

jeg kan sagtens få forbindelse til siden og når jeg logger ind og skal modtage svar fra facebook får jeg en bad request. Nogle der kan spotte fejlen?
Avatar billede Driton Seniormester
03. juli 2016 - 00:09 #1
Det er på den del af koden jeg får fejl på, som jeg har listet foroven
Avatar billede arne_v Ekspert
03. juli 2016 - 00:46 #2
Har du proevet at outputte den URL du ender op med og checket om den er OK?
Avatar billede Driton Seniormester
03. juli 2016 - 00:49 #3
Den outputtede url jeg får ser sådan her ud

http://localhost:43841/account/user.aspx?code= "en lang kode" &state=1#_=_
Avatar billede Driton Seniormester
03. juli 2016 - 00:49 #4
Nogle skriver at 1#_=_ kan give problemer
Avatar billede Driton Seniormester
03. juli 2016 - 00:50 #5
Endda gjort brugt selve eksemplet med mine oplysninger
Avatar billede arne_v Ekspert
03. juli 2016 - 00:59 #6
Proev evt. at URL encode vaerdierne (ikke hele URL)
Avatar billede arne_v Ekspert
03. juli 2016 - 01:00 #7
HttpUtility.UrlEncode(s, Encoding.UTF8)

og jeg gentager: kun varedierne - ikke det hele.
Avatar billede Driton Seniormester
03. juli 2016 - 03:27 #8
Arne kan du få eksemplet her til at virke hos dig?

https://blogs.msdn.microsoft.com/nickpinheiro/2015/02/28/facebook-login-with-asp-net-web-forms/#comment-995

Hvis ja? hvad gjorde du?
Avatar billede arne_v Ekspert
03. juli 2016 - 03:33 #9
Jeg har hverken en FB app konto eller en FB user konto jeg kan teste med.
Avatar billede Driton Seniormester
03. juli 2016 - 16:35 #10
Det virker, men der opstår endnu et problem. Den siger Email ikke findes, som en property

protected void Unnamed_ServerClick(object sender, EventArgs e)
    {

      Response.Redirect("https://www.facebook.com/v2.4/dialog/oauth/?client_id=" + ConfigurationManager.AppSettings["FacebookAppId"] + "&redirect_uri=http://localhost:58180/Logind.aspx&response_type=code&state=1&scope=email");
    }


    protected List<Facebook.User> GetFacebookUserData(string code)
    {
        // Exchange the code for an access token
        Uri targetUri = new Uri("https://graph.facebook.com/oauth/access_token?client_id=" + ConfigurationManager.AppSettings["FacebookAppId"] + "&client_secret=" + ConfigurationManager.AppSettings["FacebookAppSecret"] + "&redirect_uri=http://" + Request.ServerVariables["SERVER_NAME"] + ":" + Request.ServerVariables["SERVER_PORT"] + "/Logind.aspx&code=" + code);
        HttpWebRequest at = (HttpWebRequest)HttpWebRequest.Create(targetUri);

        System.IO.StreamReader str = new System.IO.StreamReader(at.GetResponse().GetResponseStream());
        string token = str.ReadToEnd().ToString().Replace("access_token=", "");

        // Split the access token and expiration from the single string
        string[] combined = token.Split('&');
        string accessToken = combined[0];

        // Exchange the code for an extended access token
        Uri eatTargetUri = new Uri("https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=" + ConfigurationManager.AppSettings["FacebookAppId"] + "&client_secret=" + ConfigurationManager.AppSettings["FacebookAppSecret"] + "&fb_exchange_token=" + accessToken);
        HttpWebRequest eat = (HttpWebRequest)HttpWebRequest.Create(eatTargetUri);

        StreamReader eatStr = new StreamReader(eat.GetResponse().GetResponseStream());
        string eatToken = eatStr.ReadToEnd().ToString().Replace("access_token=", "");

        // Split the access token and expiration from the single string
        string[] eatWords = eatToken.Split('&');
        string extendedAccessToken = eatWords[0];

        // Request the Facebook user information
        Uri targetUserUri = new Uri("https://graph.facebook.com/me?fields=first_name,last_name,gender,link,locale,email&access_token=" + accessToken);
        HttpWebRequest user = (HttpWebRequest)HttpWebRequest.Create(targetUserUri);

        // Read the returned JSON object response
        StreamReader userInfo = new StreamReader(user.GetResponse().GetResponseStream());
        string jsonResponse = string.Empty;
        jsonResponse = userInfo.ReadToEnd();

        // Deserialize and convert the JSON object to the Facebook.User object type
        JavaScriptSerializer sr = new JavaScriptSerializer();
        string jsondata = jsonResponse;
        Facebook.User converted = sr.Deserialize<Facebook.User>(jsondata);

        // Write the user data to a List
        List<Facebook.User> currentUser = new List<Facebook.User>();
        currentUser.Add(converted);

        // Return the current Facebook user
        return currentUser;
    }

Det er hele koden og jeg har self også en model for det, hvor email også er
Avatar billede Driton Seniormester
03. juli 2016 - 16:37 #11
Har fikset det hele tak for alt især dig Arne.
Avatar billede sonalias Seniormester
22. juli 2016 - 08:07 #12
Husk at acceptere et svar så vi kan få lukket spørgsmålet nu da dit problem er løst :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester