Angular login withCredentials:true doesnt work











up vote
1
down vote

favorite












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




























    up vote
    1
    down vote

    favorite












    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


























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      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 at 1:24









      Sanjay

      5,2482850




      5,2482850










      asked Nov 21 at 23:50









      Nagasagar Ds

      184




      184
























          3 Answers
          3






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          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 at 6:36


















          up vote
          1
          down vote













          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 at 6:42


















          up vote
          1
          down vote













          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








          New contributor




          Nagasagar Ds is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.


















            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',
            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








            up vote
            1
            down vote



            accepted










            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 at 6:36















            up vote
            1
            down vote



            accepted










            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 at 6:36













            up vote
            1
            down vote



            accepted







            up vote
            1
            down vote



            accepted






            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 at 1:32









            Sanjay

            5,2482850




            5,2482850












            • yes, that worked.
              – Nagasagar Ds
              Nov 22 at 6:36


















            • yes, that worked.
              – Nagasagar Ds
              Nov 22 at 6:36
















            yes, that worked.
            – Nagasagar Ds
            Nov 22 at 6:36




            yes, that worked.
            – Nagasagar Ds
            Nov 22 at 6:36












            up vote
            1
            down vote













            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 at 6:42















            up vote
            1
            down vote













            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 at 6:42













            up vote
            1
            down vote










            up vote
            1
            down vote









            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 at 0:19









            Hugo Noro

            1,5051414




            1,5051414












            • 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 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 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 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 at 6:42










            up vote
            1
            down vote













            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








            New contributor




            Nagasagar Ds is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.






















              up vote
              1
              down vote













              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








              New contributor




              Nagasagar Ds is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
              Check out our Code of Conduct.




















                up vote
                1
                down vote










                up vote
                1
                down vote









                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








                New contributor




                Nagasagar Ds is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.









                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








                New contributor




                Nagasagar Ds is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.









                share|improve this answer



                share|improve this answer






                New contributor




                Nagasagar Ds is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.









                answered Nov 22 at 6:40









                Nagasagar Ds

                184




                184




                New contributor




                Nagasagar Ds is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.





                New contributor





                Nagasagar Ds is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.






                Nagasagar Ds is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                Check out our Code of Conduct.






























                     

                    draft saved


                    draft discarded



















































                     


                    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

                    What visual should I use to simply compare current year value vs last year in Power BI desktop

                    Alexandru Averescu

                    Trompette piccolo