Angular login withCredentials:true doesnt work












1















Logging in using restAPIfails in browser , but works in postman.



here is my angular code for login, which throws me 401



    login(username: string, password: string) {
const httpHeaders = new HttpHeaders()
.set('Accept', 'application/json')
.set('Content-Type', 'application/x-www-form-urlencoded');
return this.http.post<any>(environment.apiUrl + '/api/core/login',
JSON.stringify({ 'username': username, 'password': password }), {withCredentials: true, headers: httpHeaders})
.pipe(map(response => {
// login successful if there's a jwt token in the response
const token = response.headers.get('Lemon-Authorization');
if (response.status === 200 && token) {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('authHeader', 'Bearer ' + token);
this.currentUserSubject.next(response.body.user);
}

return response.body.user;
}));
}


401 in chrome:
faliure in chrome



200 OK in postman :
success in postman



what am i missing?










share|improve this question





























    1















    Logging in using restAPIfails in browser , but works in postman.



    here is my angular code for login, which throws me 401



        login(username: string, password: string) {
    const httpHeaders = new HttpHeaders()
    .set('Accept', 'application/json')
    .set('Content-Type', 'application/x-www-form-urlencoded');
    return this.http.post<any>(environment.apiUrl + '/api/core/login',
    JSON.stringify({ 'username': username, 'password': password }), {withCredentials: true, headers: httpHeaders})
    .pipe(map(response => {
    // login successful if there's a jwt token in the response
    const token = response.headers.get('Lemon-Authorization');
    if (response.status === 200 && token) {
    // store user details and jwt token in local storage to keep user logged in between page refreshes
    localStorage.setItem('authHeader', 'Bearer ' + token);
    this.currentUserSubject.next(response.body.user);
    }

    return response.body.user;
    }));
    }


    401 in chrome:
    faliure in chrome



    200 OK in postman :
    success in postman



    what am i missing?










    share|improve this question



























      1












      1








      1


      0






      Logging in using restAPIfails in browser , but works in postman.



      here is my angular code for login, which throws me 401



          login(username: string, password: string) {
      const httpHeaders = new HttpHeaders()
      .set('Accept', 'application/json')
      .set('Content-Type', 'application/x-www-form-urlencoded');
      return this.http.post<any>(environment.apiUrl + '/api/core/login',
      JSON.stringify({ 'username': username, 'password': password }), {withCredentials: true, headers: httpHeaders})
      .pipe(map(response => {
      // login successful if there's a jwt token in the response
      const token = response.headers.get('Lemon-Authorization');
      if (response.status === 200 && token) {
      // store user details and jwt token in local storage to keep user logged in between page refreshes
      localStorage.setItem('authHeader', 'Bearer ' + token);
      this.currentUserSubject.next(response.body.user);
      }

      return response.body.user;
      }));
      }


      401 in chrome:
      faliure in chrome



      200 OK in postman :
      success in postman



      what am i missing?










      share|improve this question
















      Logging in using restAPIfails in browser , but works in postman.



      here is my angular code for login, which throws me 401



          login(username: string, password: string) {
      const httpHeaders = new HttpHeaders()
      .set('Accept', 'application/json')
      .set('Content-Type', 'application/x-www-form-urlencoded');
      return this.http.post<any>(environment.apiUrl + '/api/core/login',
      JSON.stringify({ 'username': username, 'password': password }), {withCredentials: true, headers: httpHeaders})
      .pipe(map(response => {
      // login successful if there's a jwt token in the response
      const token = response.headers.get('Lemon-Authorization');
      if (response.status === 200 && token) {
      // store user details and jwt token in local storage to keep user logged in between page refreshes
      localStorage.setItem('authHeader', 'Bearer ' + token);
      this.currentUserSubject.next(response.body.user);
      }

      return response.body.user;
      }));
      }


      401 in chrome:
      faliure in chrome



      200 OK in postman :
      success in postman



      what am i missing?







      angular http spring-lemon






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 22 '18 at 1:24









      Sanjay

      5,4682951




      5,4682951










      asked Nov 21 '18 at 23:50









      Nagasagar DsNagasagar Ds

      184




      184
























          3 Answers
          3






          active

          oldest

          votes


















          1














          I think the reason could be that you are JSON stingifying the request body, whereas it should be application/x-www-form-urlencoded, i.e. username=abc&password=xyz. You could look at working Spring Lemon demo code for such issues, e.g. this one.






          share|improve this answer
























          • yes, that worked.

            – Nagasagar Ds
            Nov 22 '18 at 6:36



















          1














          I believe you are facing a known CORS problem. The reason it works on postman is because It doesn’t do the called preflight request that the browsers do when you send authentication headers.



          You will probably see in your requests in the browser that the failed request is an OPTIONS and not a ‘POST’. If that’s the case it means your server configuration is lacking CORS configurations.






          share|improve this answer
























          • thank you for your answer. i had cors cofigurationofmy server correct, i only messed up to specify Angular to POST using x-www-form-urlencoded

            – Nagasagar Ds
            Nov 22 '18 at 6:42



















          1














          here is working code :



           login(username: string, password: string) {
          const body = new URLSearchParams();
          body.set('username', username);
          body.set('password', password);
          const options = {
          headers: new HttpHeaders()
          .set('Accept', 'application/json')
          .set('Content-Type', 'application/x-www-form-urlencoded'),
          withCredentials: true
          };
          return this.http.post<any>(environment.apiUrl + '/api/core/login',
          body.toString(), options)
          .pipe(map(response => {
          // login successful if there's a jwt token in the response
          const token = response.headers.get('Lemon-Authorization');
          if (response.status === 200 && token) {
          // store user details and jwt token in local storage to keep user logged in between page refreshes
          localStorage.setItem('authHeader', 'Bearer ' + token);
          this.currentUserSubject.next(response.body.user);
          }

          return response.body.user;
          }));
          }


          more info here -
          How to force Angular2 to POST using x-www-form-urlencoded






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53422050%2fangular-login-withcredentialstrue-doesnt-work%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            3 Answers
            3






            active

            oldest

            votes








            3 Answers
            3






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            I think the reason could be that you are JSON stingifying the request body, whereas it should be application/x-www-form-urlencoded, i.e. username=abc&password=xyz. You could look at working Spring Lemon demo code for such issues, e.g. this one.






            share|improve this answer
























            • yes, that worked.

              – Nagasagar Ds
              Nov 22 '18 at 6:36
















            1














            I think the reason could be that you are JSON stingifying the request body, whereas it should be application/x-www-form-urlencoded, i.e. username=abc&password=xyz. You could look at working Spring Lemon demo code for such issues, e.g. this one.






            share|improve this answer
























            • yes, that worked.

              – Nagasagar Ds
              Nov 22 '18 at 6:36














            1












            1








            1







            I think the reason could be that you are JSON stingifying the request body, whereas it should be application/x-www-form-urlencoded, i.e. username=abc&password=xyz. You could look at working Spring Lemon demo code for such issues, e.g. this one.






            share|improve this answer













            I think the reason could be that you are JSON stingifying the request body, whereas it should be application/x-www-form-urlencoded, i.e. username=abc&password=xyz. You could look at working Spring Lemon demo code for such issues, e.g. this one.







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 22 '18 at 1:32









            SanjaySanjay

            5,4682951




            5,4682951













            • yes, that worked.

              – Nagasagar Ds
              Nov 22 '18 at 6:36



















            • yes, that worked.

              – Nagasagar Ds
              Nov 22 '18 at 6:36

















            yes, that worked.

            – Nagasagar Ds
            Nov 22 '18 at 6:36





            yes, that worked.

            – Nagasagar Ds
            Nov 22 '18 at 6:36













            1














            I believe you are facing a known CORS problem. The reason it works on postman is because It doesn’t do the called preflight request that the browsers do when you send authentication headers.



            You will probably see in your requests in the browser that the failed request is an OPTIONS and not a ‘POST’. If that’s the case it means your server configuration is lacking CORS configurations.






            share|improve this answer
























            • thank you for your answer. i had cors cofigurationofmy server correct, i only messed up to specify Angular to POST using x-www-form-urlencoded

              – Nagasagar Ds
              Nov 22 '18 at 6:42
















            1














            I believe you are facing a known CORS problem. The reason it works on postman is because It doesn’t do the called preflight request that the browsers do when you send authentication headers.



            You will probably see in your requests in the browser that the failed request is an OPTIONS and not a ‘POST’. If that’s the case it means your server configuration is lacking CORS configurations.






            share|improve this answer
























            • thank you for your answer. i had cors cofigurationofmy server correct, i only messed up to specify Angular to POST using x-www-form-urlencoded

              – Nagasagar Ds
              Nov 22 '18 at 6:42














            1












            1








            1







            I believe you are facing a known CORS problem. The reason it works on postman is because It doesn’t do the called preflight request that the browsers do when you send authentication headers.



            You will probably see in your requests in the browser that the failed request is an OPTIONS and not a ‘POST’. If that’s the case it means your server configuration is lacking CORS configurations.






            share|improve this answer













            I believe you are facing a known CORS problem. The reason it works on postman is because It doesn’t do the called preflight request that the browsers do when you send authentication headers.



            You will probably see in your requests in the browser that the failed request is an OPTIONS and not a ‘POST’. If that’s the case it means your server configuration is lacking CORS configurations.







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 22 '18 at 0:19









            Hugo NoroHugo Noro

            1,6401515




            1,6401515













            • thank you for your answer. i had cors cofigurationofmy server correct, i only messed up to specify Angular to POST using x-www-form-urlencoded

              – Nagasagar Ds
              Nov 22 '18 at 6:42



















            • thank you for your answer. i had cors cofigurationofmy server correct, i only messed up to specify Angular to POST using x-www-form-urlencoded

              – Nagasagar Ds
              Nov 22 '18 at 6:42

















            thank you for your answer. i had cors cofigurationofmy server correct, i only messed up to specify Angular to POST using x-www-form-urlencoded

            – Nagasagar Ds
            Nov 22 '18 at 6:42





            thank you for your answer. i had cors cofigurationofmy server correct, i only messed up to specify Angular to POST using x-www-form-urlencoded

            – Nagasagar Ds
            Nov 22 '18 at 6:42











            1














            here is working code :



             login(username: string, password: string) {
            const body = new URLSearchParams();
            body.set('username', username);
            body.set('password', password);
            const options = {
            headers: new HttpHeaders()
            .set('Accept', 'application/json')
            .set('Content-Type', 'application/x-www-form-urlencoded'),
            withCredentials: true
            };
            return this.http.post<any>(environment.apiUrl + '/api/core/login',
            body.toString(), options)
            .pipe(map(response => {
            // login successful if there's a jwt token in the response
            const token = response.headers.get('Lemon-Authorization');
            if (response.status === 200 && token) {
            // store user details and jwt token in local storage to keep user logged in between page refreshes
            localStorage.setItem('authHeader', 'Bearer ' + token);
            this.currentUserSubject.next(response.body.user);
            }

            return response.body.user;
            }));
            }


            more info here -
            How to force Angular2 to POST using x-www-form-urlencoded






            share|improve this answer




























              1














              here is working code :



               login(username: string, password: string) {
              const body = new URLSearchParams();
              body.set('username', username);
              body.set('password', password);
              const options = {
              headers: new HttpHeaders()
              .set('Accept', 'application/json')
              .set('Content-Type', 'application/x-www-form-urlencoded'),
              withCredentials: true
              };
              return this.http.post<any>(environment.apiUrl + '/api/core/login',
              body.toString(), options)
              .pipe(map(response => {
              // login successful if there's a jwt token in the response
              const token = response.headers.get('Lemon-Authorization');
              if (response.status === 200 && token) {
              // store user details and jwt token in local storage to keep user logged in between page refreshes
              localStorage.setItem('authHeader', 'Bearer ' + token);
              this.currentUserSubject.next(response.body.user);
              }

              return response.body.user;
              }));
              }


              more info here -
              How to force Angular2 to POST using x-www-form-urlencoded






              share|improve this answer


























                1












                1








                1







                here is working code :



                 login(username: string, password: string) {
                const body = new URLSearchParams();
                body.set('username', username);
                body.set('password', password);
                const options = {
                headers: new HttpHeaders()
                .set('Accept', 'application/json')
                .set('Content-Type', 'application/x-www-form-urlencoded'),
                withCredentials: true
                };
                return this.http.post<any>(environment.apiUrl + '/api/core/login',
                body.toString(), options)
                .pipe(map(response => {
                // login successful if there's a jwt token in the response
                const token = response.headers.get('Lemon-Authorization');
                if (response.status === 200 && token) {
                // store user details and jwt token in local storage to keep user logged in between page refreshes
                localStorage.setItem('authHeader', 'Bearer ' + token);
                this.currentUserSubject.next(response.body.user);
                }

                return response.body.user;
                }));
                }


                more info here -
                How to force Angular2 to POST using x-www-form-urlencoded






                share|improve this answer













                here is working code :



                 login(username: string, password: string) {
                const body = new URLSearchParams();
                body.set('username', username);
                body.set('password', password);
                const options = {
                headers: new HttpHeaders()
                .set('Accept', 'application/json')
                .set('Content-Type', 'application/x-www-form-urlencoded'),
                withCredentials: true
                };
                return this.http.post<any>(environment.apiUrl + '/api/core/login',
                body.toString(), options)
                .pipe(map(response => {
                // login successful if there's a jwt token in the response
                const token = response.headers.get('Lemon-Authorization');
                if (response.status === 200 && token) {
                // store user details and jwt token in local storage to keep user logged in between page refreshes
                localStorage.setItem('authHeader', 'Bearer ' + token);
                this.currentUserSubject.next(response.body.user);
                }

                return response.body.user;
                }));
                }


                more info here -
                How to force Angular2 to POST using x-www-form-urlencoded







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 22 '18 at 6:40









                Nagasagar DsNagasagar Ds

                184




                184






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53422050%2fangular-login-withcredentialstrue-doesnt-work%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    If I really need a card on my start hand, how many mulligans make sense? [duplicate]

                    Alcedinidae

                    Can an atomic nucleus contain both particles and antiparticles? [duplicate]