cari
Rumahhujung hadapan webtutorial jsMelaksanakan pengesahan dalam aplikasi sudut

Implementing Authentication in Angular Applications

mata utama

    Melaksanakan pengesahan dalam aplikasi halaman tunggal (SPA) melibatkan pelayan yang mendedahkan titik akhir pengesahan yang mengesahkan kelayakan pengguna dan mengembalikan token akses. Token ini kemudiannya digunakan untuk semua permintaan API selamat yang dibuat ke pelayan.
  • Dalam sudut, token akses boleh disimpan dalam perkhidmatan atau dalam nilai kerana mereka adalah objek singleton pada pelanggan. Walau bagaimanapun, untuk mengelakkan kehilangan token apabila pengguna menyegarkan halaman tersebut, disyorkan untuk menggunakan mekanisme ketekunan pelayar (seperti sessionStorage) untuk menyimpan token.
  • Untuk mengelakkan kecurian data yang berpotensi, status pengguna harus dikekalkan dan disahkan pada sisi pelayan dan di sisi klien. Apabila pengguna log keluar, API yang sepadan harus dipanggil (token akses dimasukkan ke dalam header permintaan) dan data dalam sessionStorage juga harus dibersihkan.
Pengesahan dan kebenaran adalah bahagian penting dari hampir semua permohonan yang serius. Aplikasi halaman tunggal (SPA) tidak terkecuali. Permohonan tidak boleh mendedahkan semua data dan fungsinya kepada mana -mana pengguna. Pengguna mungkin perlu mengesahkan untuk melihat bahagian tertentu aplikasi, atau melakukan tindakan tertentu pada aplikasi. Untuk mengenal pasti pengguna dalam aplikasi, kita perlu log masuk.

Dalam aplikasi yang didorong oleh pelayan tradisional dan aplikasi satu halaman, pelaksanaan pengurusan pengguna adalah berbeza. Satu -satunya cara spa berinteraksi dengan komponen pelayannya adalah melalui Ajax. Ini benar walaupun untuk log masuk dan logout.

Pelayan yang bertanggungjawab untuk mengenal pasti pengguna mesti mendedahkan titik akhir pengesahan. Spa akan menghantar kelayakan yang dimasukkan ke pengguna ke titik akhir ini untuk pengesahan. Dalam sistem pengesahan berasaskan token yang tipikal, perkhidmatan boleh mengembalikan token akses atau objek yang mengandungi nama dan peranan pengguna log masuk selepas pengesahan kelayakan. Pelanggan mesti menggunakan token akses ini dalam semua permintaan API selamat yang dibuat ke pelayan.

Oleh kerana token akses akan digunakan beberapa kali, sebaiknya menyimpannya pada pelanggan. Dalam sudut, kita boleh menyimpan nilai dalam perkhidmatan atau nilai kerana mereka adalah objek singleton pada pelanggan. Walau bagaimanapun, jika pengguna menyegarkan halaman, nilai dalam perkhidmatan atau nilai akan hilang. Dalam kes ini, lebih baik menggunakan salah satu mekanisme ketekunan yang disediakan oleh penyemak imbas untuk menyimpan token;

mencapai login

mari kita lihat beberapa kod sekarang. Katakan kami telah melaksanakan semua logik sisi pelayan dan perkhidmatan mendedahkan titik akhir REST di /API /Login untuk memeriksa kelayakan log masuk dan mengembalikan token akses. Mari kita tulis perkhidmatan mudah yang melakukan operasi log masuk dengan mengakses titik akhir pengesahan. Kami akan menambah lebih banyak ciri untuk perkhidmatan ini kemudian:

app.factory("authenticationSvc", function($http, $q, $window) {
  var userInfo;

  function login(userName, password) {
    var deferred = $q.defer();

    $http.post("/api/login", {
      userName: userName,
      password: password
    }).then(function(result) {
      userInfo = {
        accessToken: result.data.access_token,
        userName: result.data.userName
      };
      $window.sessionStorage["userInfo"] = JSON.stringify(userInfo);
      deferred.resolve(userInfo);
    }, function(error) {
      deferred.reject(error);
    });

    return deferred.promise;
  }

  return {
    login: login
  };
});

Dalam kod sebenar, anda mungkin mahu refactor pernyataan yang menyimpan data ke sessionStorage ke dalam perkhidmatan yang berasingan, kerana jika kita melakukan ini, perkhidmatan ini akan mengambil pelbagai tanggungjawab. Untuk memastikan demo mudah, saya menyimpannya dalam perkhidmatan yang sama. Perkhidmatan ini boleh digunakan oleh pengawal yang mengendalikan fungsi log masuk aplikasi.

Melindungi laluan

Kami mungkin mempunyai satu set laluan yang dilindungi dalam permohonan kami. Jika pengguna tidak log masuk dan cuba memasukkan salah satu laluan ini, pengguna harus diarahkan ke halaman log masuk. Ini boleh dilakukan menggunakan blok penyelesaian dalam pilihan penghalaan. Coretan kod berikut menggambarkan pelaksanaan:

$routeProvider.when("/", {
  templateUrl: "templates/home.html",
  controller: "HomeController",
  resolve: {
    auth: ["$q", "authenticationSvc", function($q, authenticationSvc) {
      var userInfo = authenticationSvc.getUserInfo();

      if (userInfo) {
        return $q.when(userInfo);
      } else {
        return $q.reject({ authenticated: false });
      }
    }]
  }
});
Blok penyelesaian

boleh mengandungi pelbagai blok pernyataan yang mesti mengembalikan objek janji setelah selesai. Hanya untuk menjelaskan, nama yang ditakrifkan di atas tidak ditakrifkan oleh rangka kerja; Anda boleh menukar nama ke mana -mana nama berdasarkan kes penggunaan.

Terdapat beberapa sebab yang boleh menyebabkan penghalaan diluluskan atau ditolak. Bergantung pada senario, anda boleh lulus objek apabila parsing/menolak janji. Kami belum melaksanakan kaedah getLoggedInuser () dalam perkhidmatan. Ini adalah cara mudah untuk mengembalikan objek loggedinuser dari perkhidmatan.

app.factory("authenticationSvc", function() {
  var userInfo;

  function getUserInfo() {
    return userInfo;
  }
});

Objek yang dihantar oleh janji dalam coretan kod di atas disiarkan melalui $ ROOTSCOPE. Sekiranya laluan telah diselesaikan, acara $ RouteChangeSuccess disiarkan. Walau bagaimanapun, jika penghalaan gagal, acara $ RouteChangeError disiarkan. Kami boleh mendengar acara $ RouteChangeError dan mengalihkan pengguna ke halaman log masuk. Oleh kerana peristiwa berada di tahap $ Rootscope, lebih baik untuk melampirkan pengendali acara di blok larian.

app.run(["$rootScope", "$location", function($rootScope, $location) {
  $rootScope.$on("$routeChangeSuccess", function(userInfo) {
    console.log(userInfo);
  });

  $rootScope.$on("$routeChangeError", function(event, current, previous, eventObj) {
    if (eventObj.authenticated === false) {
      $location.path("/login");
    }
  });
}]);

Memproses halaman Refresh

Apabila pengguna mengklik pada butang penyegaran halaman, perkhidmatan kehilangan statusnya. Kami perlu mendapatkan data dari sessionStorage penyemak imbas dan menyerahkannya kepada pembolehubah pembolehubah. Oleh kerana kilang dipanggil hanya sekali, kita boleh menetapkan pembolehubah ini dalam fungsi permulaan seperti yang ditunjukkan di bawah.

function init() {
  if ($window.sessionStorage["userInfo"]) {
    userInfo = JSON.parse($window.sessionStorage["userInfo"]);
  }
}

init();

Batal

Apabila pengguna log keluar dari aplikasi, API yang sepadan mesti dipanggil dan token akses dimasukkan ke dalam tajuk permintaan. Selepas pengguna log keluar, kami juga harus membersihkan data dalam sessionStorage. Contoh berikut mengandungi fungsi logout yang mesti ditambah kepada perkhidmatan pengesahan.

function logout() {
  var deferred = $q.defer();

  $http({
    method: "POST",
    url: logoutUrl,
    headers: {
      "access_token": userInfo.accessToken
    }
  }).then(function(result) {
    $window.sessionStorage["userInfo"] = null;
    userInfo = null;
    deferred.resolve(result);
  }, function(error) {
    deferred.reject(error);
  });

  return deferred.promise;
}

Kesimpulan

Kaedah pelaksanaan pengesahan dalam satu aplikasi halaman sangat berbeza daripada aplikasi web tradisional. Oleh kerana kebanyakan kerja dilakukan pada pelanggan, status pengguna juga harus disimpan di suatu tempat pada klien. Adalah penting untuk diingat bahawa Negeri juga mesti dikekalkan dan disahkan di sisi pelayan, kerana penggodam boleh mencuri data yang disimpan pada sistem klien.

Kod sumber dalam artikel ini boleh dimuat turun di GitHub.

Soalan Lazim untuk Melaksanakan Pengesahan dalam Aplikasi Angular

Bagaimana menggunakan harta dengan Sudut?

Hartanah dengan

dengan menggunakan cookies pengesahan dalam permintaan HTTP. Dalam sudut, anda boleh menggunakannya dalam modul httpclient. Apabila membuat permintaan, anda boleh menetapkan harta dengan benar. Berikut adalah contoh:

this.http.get(url, { withCredentials: true }).subscribe(...);

Ini akan mengandungi sebarang kuki yang mungkin telah dihantar sebelum pelayan.

Apakah tujuan httpinterceptor dalam sudut?

HttpInterceptor adalah ciri dalam Angular yang membolehkan anda memintas secara global dan mengubah suai permintaan HTTP sebelum menghantarnya ke pelayan. Ia sangat berguna untuk pelbagai tugas, seperti menambah token pengesahan kepada semua permintaan atau mengendalikan kesilapan global.

Bagaimana untuk membuat httpinterceptor tersuai untuk mengendalikan dengan kredensi?

Untuk membuat httpinterceptor tersuai, anda perlu membuat perkhidmatan yang melaksanakan antara muka httpinterceptor. Berikut adalah contoh:

app.factory("authenticationSvc", function($http, $q, $window) {
  var userInfo;

  function login(userName, password) {
    var deferred = $q.defer();

    $http.post("/api/login", {
      userName: userName,
      password: password
    }).then(function(result) {
      userInfo = {
        accessToken: result.data.access_token,
        userName: result.data.userName
      };
      $window.sessionStorage["userInfo"] = JSON.stringify(userInfo);
      deferred.resolve(userInfo);
    }, function(error) {
      deferred.reject(error);
    });

    return deferred.promise;
  }

  return {
    login: login
  };
});
Pemintas ini mengklon setiap permintaan dan menetapkan harta dengan benar.

Kenapa anda menerima ralat CORS semasa menggunakan dengan pemalsuan?

CORS (Perkongsian Sumber Sumber Asas) adalah ciri keselamatan yang membatasi cara sumber dikongsi di seluruh domain. Jika anda menerima ralat CORS, pelayan tidak dikonfigurasi untuk menerima permintaan dari domain anda. Untuk menyelesaikannya, anda perlu mengkonfigurasi pelayan untuk memasukkan domain anda dalam header "Access-Control-Allow-Origin" dan menetapkan "akses kawalan-alow-credentials" kepada benar.

Bagaimana menggunakan harta XMLHTTPREQUEST WithCredentials?

XMLHTTPREQUEST WithCredentials Property berfungsi sama dengan HttpClient WithCredentials Sudut. Ia digunakan untuk memasukkan kuki dalam permintaan. Berikut adalah contoh:

$routeProvider.when("/", {
  templateUrl: "templates/home.html",
  controller: "HomeController",
  resolve: {
    auth: ["$q", "authenticationSvc", function($q, authenticationSvc) {
      var userInfo = authenticationSvc.getUserInfo();

      if (userInfo) {
        return $q.when(userInfo);
      } else {
        return $q.reject({ authenticated: false });
      }
    }]
  }
});
Ini akan menghantar permintaan GET yang mengandungi kuki ke URL yang ditentukan.

Baki Soalan Lazim berkaitan dengan penggunaan HttpClientModule dan tidak ada kaitan dengan topik teras artikel (pelaksanaan pengesahan dalam sudut), sehingga mereka ditinggalkan di sini. Soalan -soalan ini boleh didapati dengan mudah melalui enjin carian.

Atas ialah kandungan terperinci Melaksanakan pengesahan dalam aplikasi sudut. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Python vs JavaScript: Analisis Perbandingan untuk PemajuPython vs JavaScript: Analisis Perbandingan untuk PemajuMay 09, 2025 am 12:22 AM

Perbezaan utama antara Python dan JavaScript ialah sistem jenis dan senario aplikasi. 1. Python menggunakan jenis dinamik, sesuai untuk pengkomputeran saintifik dan analisis data. 2. JavaScript mengamalkan jenis yang lemah dan digunakan secara meluas dalam pembangunan depan dan stack penuh. Kedua -duanya mempunyai kelebihan mereka sendiri dalam pengaturcaraan dan pengoptimuman prestasi yang tidak segerak, dan harus diputuskan mengikut keperluan projek ketika memilih.

Python vs JavaScript: Memilih alat yang sesuai untuk pekerjaanPython vs JavaScript: Memilih alat yang sesuai untuk pekerjaanMay 08, 2025 am 12:10 AM

Sama ada untuk memilih Python atau JavaScript bergantung kepada jenis projek: 1) Pilih Python untuk Sains Data dan Tugas Automasi; 2) Pilih JavaScript untuk pembangunan front-end dan penuh. Python disukai untuk perpustakaannya yang kuat dalam pemprosesan data dan automasi, sementara JavaScript sangat diperlukan untuk kelebihannya dalam interaksi web dan pembangunan stack penuh.

Python dan javascript: memahami kekuatan masing -masingPython dan javascript: memahami kekuatan masing -masingMay 06, 2025 am 12:15 AM

Python dan JavaScript masing -masing mempunyai kelebihan mereka sendiri, dan pilihan bergantung kepada keperluan projek dan keutamaan peribadi. 1. Python mudah dipelajari, dengan sintaks ringkas, sesuai untuk sains data dan pembangunan back-end, tetapi mempunyai kelajuan pelaksanaan yang perlahan. 2. JavaScript berada di mana-mana dalam pembangunan front-end dan mempunyai keupayaan pengaturcaraan tak segerak yang kuat. Node.js menjadikannya sesuai untuk pembangunan penuh, tetapi sintaks mungkin rumit dan rawan kesilapan.

Inti JavaScript: Adakah ia dibina di atas C atau C?Inti JavaScript: Adakah ia dibina di atas C atau C?May 05, 2025 am 12:07 AM

Javascriptisnotbuiltoncorc; it'saninterpretedlanguagethatrunsonenginesoftenwritteninc .1) javascriptwasdesignedasalightweight, interpratedlanguageforwebbrowsers.2)

Aplikasi JavaScript: Dari Front-End ke Back-EndAplikasi JavaScript: Dari Front-End ke Back-EndMay 04, 2025 am 12:12 AM

JavaScript boleh digunakan untuk pembangunan front-end dan back-end. Bahagian depan meningkatkan pengalaman pengguna melalui operasi DOM, dan back-end mengendalikan tugas pelayan melalui Node.js. 1. Contoh front-end: Tukar kandungan teks laman web. 2. Contoh backend: Buat pelayan Node.js.

Python vs JavaScript: Bahasa mana yang harus anda pelajari?Python vs JavaScript: Bahasa mana yang harus anda pelajari?May 03, 2025 am 12:10 AM

Memilih Python atau JavaScript harus berdasarkan perkembangan kerjaya, keluk pembelajaran dan ekosistem: 1) Pembangunan Kerjaya: Python sesuai untuk sains data dan pembangunan back-end, sementara JavaScript sesuai untuk pembangunan depan dan penuh. 2) Kurva Pembelajaran: Sintaks Python adalah ringkas dan sesuai untuk pemula; Sintaks JavaScript adalah fleksibel. 3) Ekosistem: Python mempunyai perpustakaan pengkomputeran saintifik yang kaya, dan JavaScript mempunyai rangka kerja front-end yang kuat.

Rangka Kerja JavaScript: Menguasai Pembangunan Web ModenRangka Kerja JavaScript: Menguasai Pembangunan Web ModenMay 02, 2025 am 12:04 AM

Kuasa rangka kerja JavaScript terletak pada pembangunan yang memudahkan, meningkatkan pengalaman pengguna dan prestasi aplikasi. Apabila memilih rangka kerja, pertimbangkan: 1.

Hubungan antara JavaScript, C, dan penyemak imbasHubungan antara JavaScript, C, dan penyemak imbasMay 01, 2025 am 12:06 AM

Pengenalan Saya tahu anda mungkin merasa pelik, apa sebenarnya yang perlu dilakukan oleh JavaScript, C dan penyemak imbas? Mereka seolah -olah tidak berkaitan, tetapi sebenarnya, mereka memainkan peranan yang sangat penting dalam pembangunan web moden. Hari ini kita akan membincangkan hubungan rapat antara ketiga -tiga ini. Melalui artikel ini, anda akan mempelajari bagaimana JavaScript berjalan dalam penyemak imbas, peranan C dalam enjin pelayar, dan bagaimana mereka bekerjasama untuk memacu rendering dan interaksi laman web. Kita semua tahu hubungan antara JavaScript dan penyemak imbas. JavaScript adalah bahasa utama pembangunan front-end. Ia berjalan secara langsung di penyemak imbas, menjadikan laman web jelas dan menarik. Adakah anda pernah tertanya -tanya mengapa Javascr

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa