卡爾大火極具破壞性 加州史上第9大

摘錄自2018年7月31日中央社加州報導

美國加州北部野火「卡爾大火」(Carr Fire)已奪走至少六條人命,在今夏極度乾燥的美西地區數十起火災中災情最嚴重,森林防火廳官員表示,據信這是加州史上第九大破壞性大火。

美聯社報導,加州森林防火廳(CalFire)發言人麥克林(Scott Mclean)表示,這場大火目前據信是加州史上第九大破壞性大火,燒毀至少818棟房屋和311棟附屬建築物,並造成165棟房屋受損。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!

※產品缺大量曝光嗎?你需要的是一流包裝設計!

電動車、太陽能福音 科學家找到可極速充電的材料

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

新北清潔公司,居家、辦公、裝潢細清專業服務

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

日政府看好燃料電池車 加碼補助研發

環保意識抬頭,豐田汽車(Toyota Motor)的油電混合車Prius搖身一變成了全球暢銷車款。日本當局看好這股綠色趨勢,計畫投資新一代節能車,讓該國未來一、二十年能穩坐車壇霸主地位。

華爾街日報26 日報導,日本政府擬斥資研發燃料電池車,這種汽車靠氫燃料發動,只排放水蒸汽,不會造成空氣汙染。該國政府24 日宣布,2014 年4 月起的會計年度,將撥款72 億日圓,補助建造氫燃料站;同時也將挹注64 億日圓研發如何降低燃料電池的製造成本。

此外,當局任命東芝(Toshiba)、東京瓦斯(Tokyo Gas)等企業和學界專家共組委員會,草擬計畫,要在2030 年前協助燃料電池科技獲得採用。政府也希望運用水力、風力、地熱、太陽能發電,從水中製造氫氣,不要再從煤炭、石油、天然氣中提煉。

豐田和本田汽車(Honda)先前宣布,計畫在2015 年推出燃料電池車。不過南韓現代汽車(Hyundai Motor)搶先一步,11 月表示氫燃料電池車Tucson SUV 將於明(2014)年上市。

環保車市火熱,豐田和特斯拉(Tesla Motors)曾隔空交火。華爾街日報報導,Toyota 董事長內山田武2013 年9 月30 日受訪指出,Toyota 之所以並未推出任何一款重量級純電動車,是因為該公司不認為這種產品會有市場。

十月底報導,執行長Elon Musk 在德國慕尼黑最新開幕的特斯拉展示中心向支持者表示,很多人都說純電動車根本沒有未來,但他認為氫燃料電池才胡扯、簡直是垃圾。Musk 說,燃料電池基本上只是行銷伎倆,氫是危險性頗高的氣體,比較適合用來推動火箭。

原始來源、授權:TechNews—

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

福特CES展新款插電式電動車 利用太陽能板充電

據悉,全美第2大車廠福特汽車公司(Ford Motor)準備展示1款插電式混合動力電動車,這款車透過車頂太陽能板充電。C-Max Solar Energi將在7日起於拉斯維加斯登場的2014國際消費電子展(International Consumer Electronics Show)亮相。

C-Max純靠電力可行駛大約21英里(34公里),最遠行程620英里左右。C-Max的車頂配備SunPower公司300至350瓦的太陽能電池,預告未來可能生產不需插電的量產充電車。

這輛車的概念包括設置類似頂篷的停車棚,運用菲涅爾透鏡(Fresnel lenses)將陽光聚焦在這輛車,提高太陽能電池的效能。這款電動車還配有與充電站接合的標準充電器。

這款車由喬治亞理工學院(Georgia Institute of Technology)研發,可隨太陽的移動方向轉換位置。福特預估,該公司去年賣出超過8萬5000輛混合動力車及電動車。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

豐田CES展將推燃料電池概念車 加氫只需3分鐘

據悉,日本豐田汽車(Toyota)將在2014年的美國消費電子展(CES)上,主打燃料電池概念車(FCV),展示該公司研發汽車清淨能源的成果。豐田表示,這款概念車可跑310英哩(499公里),加氫時間只需3分鐘,新車預定2015年開賣。

豐田的燃料電池車原本預計要價5萬美元,實際定價可能接近10萬美元。新車改良油電混合車,用燃料電池取代汽油引擎,電動馬達和其他零件則和現行的油電混合相去不遠。

本站,福特汽車(Ford Motor)2日宣佈,C-Max Solar Energi太陽能概念車將在CES亮相。

C-Max純靠電力可行駛大約21英里(34公里),最遠行程620英里左右。C-Max的車頂配備SunPower公司300至350瓦的太陽能電池,預告未來可能生產不需插電的量產充電車。福特表示,一整天的日光照射約等於4小時的充電量,大約有8瓩(KW)。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

豐田氫燃料電池車FCV明年先在加州地區上路

日本汽車龍頭豐田6日表示,將於2015年首先在美國市場推出具「零排放」功能的「氫燃料電池車」,此款車型名稱暫定為FCV,利用氫燃料電池做為動力來源,行駛時僅排放水蒸氣。該款車型的售價將控制在5~10萬美元之間。該款車型在日本市場的推出時間,料將與美國市場同步。豐田的競爭對手現代與本田也表示將於明年推出同類型的汽車。

豐田銷售副資深副總卡特(Bob Carter)表示,FCV在功能上屬於一般車型,是一款零排放、電力驅動、中型規格、4門轎車的車款,將配合加州政府的充電站政策,於當地優先推出。

豐田大幅改造氫燃料電池車的車型設計,使氫燃料電池在運作過程中,大幅降低對氧氣的需求。氫氣車在充滿電力後,可行駛300英里(約480公里)的車程。充電時間僅需費時3~5分鐘。

豐田近來與加州大學合作,表示最初的1萬輛氫氣車,僅有舊金山與聖地牙哥一帶的68座充電站,能夠支援氫燃料電力。但為方便未來的充電需求,加州政府已通過2億美元經費,規劃在2015年、2016年、與2024年,分別新增20座、40座,與100個充電站。卡特指出,如果設置適當,只須利用加州目前1萬座加油站當中的15%,將其轉型成氫燃料充電站,就可充分提供電力需求。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

※教你寫出一流的銷售文案?

三菱汽車計畫到2020年 擴增環保車款比重至20%

據日經新聞11日報導,因看好今後日本國內快速充電器可望日益普及,汽車大廠三菱汽車(Mitsubishi Motors)計畫擴增插電式油電混合車(PHV)的車種數量;並計畫投資約50億日圓改良主力生產據點「名古屋製作所」的產線,目標為在2015年5月底前將PHV年產能倍增至6萬台的水準、並計劃於2015年開始出口至北美進行販售。

目前PHV等環保車款佔三菱汽車整體產量比重僅2%,但三菱汽車計劃於2020年度將其比重提高至20%的水準。三菱汽車已於2013年1月開賣PHV車種「Outlander PHEV」,目前日本國內累計銷售量為1萬台、歐洲市場累銷也約1萬台。而除了Outlander車種之外,三菱汽車也計畫推出「Pajero」及「RVR」車款的PHV。

Outlander PHEV

日經新聞曾於2013年7月報導指出,豐田汽車(Toyota)、日產汽車(Nissan)、本田汽車(Honda)及三菱汽車(Mitsubishi Motors)等日本4大車廠計畫攜手合作,計畫將日本國內使用於電動車等車種的快速充電器設置數量擴增至4,000座以上,將較現行提高1倍。以期望藉由擴充充電設備,擴大電動車及插電式油電混合車(PHV)市場。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!

※產品缺大量曝光嗎?你需要的是一流包裝設計!

萬向集團收購價更優厚 Fisker將再次公開拍賣

據悉,萬向集團與李澤楷爭奪已破產的美國豪華電動車廠Fisker的官司,上周五(10日)有了結果,法官拒絕了李澤楷的收購建議,並同意萬向集團提出將Fisker公開拍賣的請求。Fisker的律師其後開會討論拍賣日期,以及萬向集團取代混合動力控股作為Fisker的破產貸方事宜。

此前,萬向旗下美國公司VL向當地法院提出,對Fisker的收購提價1000萬美元,令總作價達3570萬美元,該價格無疑對負債纍纍的Fisker極具吸引,並獲Fisker債權人支持。

美國能源部曾為Fisker提供5.29億美元貸款,Fisker在2007年成立後,於民間及公開集資逾14億美元,但最終仍要破產。

去年10月,混合動力控股於拍賣中,僅花2500萬美元,從美國政府方面購入Fisker的貸款而控制該公司。但Fisker的無擔保債權人為保利益,與萬向聯手提出反對,聲言可為債權人追收近40%的債款。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

新北清潔公司,居家、辦公、裝潢細清專業服務

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

對象創建與堆

這一節主要介紹對象創建時,在堆中的一些過程。

回憶下,我們之前說的,什麼時候會發生垃圾回收?

除了在一些安全點處也許會發生垃圾回收(只是也許),如果在所需內存不足的情況下,一定會發生垃圾回收。

分配堆空間

首先通過設置參數,把堆空間設置為 20M,其中 新生代 10M,老年代 10M。

參數設置:

-Xms20m -Xmx20m -Xmn10m -XX:+PrintGCDetails

結果為:

Heap
 PSYoungGen      total 9216K, used 1685K [0x00000007bf600000, 0x00000007c0000000, 0x00000007c0000000)
  eden space 8192K, 20% used [0x00000007bf600000,0x00000007bf7a5580,0x00000007bfe00000)
  from space 1024K, 0% used [0x00000007bff00000,0x00000007bff00000,0x00000007c0000000)
  to   space 1024K, 0% used [0x00000007bfe00000,0x00000007bfe00000,0x00000007bff00000)
 ParOldGen       total 10240K, used 0K [0x00000007bec00000, 0x00000007bf600000, 0x00000007bf600000)
  object space 10240K, 0% used [0x00000007bec00000,0x00000007bec00000,0x00000007bf600000)

創建一個新對象

我們首先創建一個對象,這個對象佔用 2M 的空間。

package heap;

public class CreateObject {
    public static void main(String[] args) {
        byte[] obj1 = new byte[1024 * 1024 * 2];
    }
}

最後的輸出:

Heap
 PSYoungGen      total 9216K, used 3733K [0x00000007bf600000, 0x00000007c0000000, 0x00000007c0000000)
  eden space 8192K, 45% used [0x00000007bf600000,0x00000007bf9a5590,0x00000007bfe00000)
  from space 1024K, 0% used [0x00000007bff00000,0x00000007bff00000,0x00000007c0000000)
  to   space 1024K, 0% used [0x00000007bfe00000,0x00000007bfe00000,0x00000007bff00000)
 ParOldGen       total 10240K, used 0K [0x00000007bec00000, 0x00000007bf600000, 0x00000007bf600000)
  object space 10240K, 0% used [0x00000007bec00000,0x00000007bec00000,0x00000007bf600000)

可以看到,新生代 被佔用了,老年代佔用為 0K,沒有被使用。

所以,new 的對象先放在 eden 區。

填滿 eden 區

在填滿 eden 區后,會發生什麼呢?因為 survivor 區實在太小了,很難看到。所以,這裏可以藉助 Visual VM,來觀察,更加直觀。

程序如下:

package heap;

public class CreateObject {
    public static void main(String[] args) {
        while(true){
            byte[] bytes = new byte[1024 * 512];
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

重點是看右邊的記錄圖。注意,這裏我們將每次創建對象的大小設置為了 0.5M。

當 Eden 滿的時候,會調用垃圾回收器,調用垃圾回收器后,Eden 出現了低谷,Survivor 出現了一個增長。老年區也出現了一個增長。

當 Eden 滿的時候,如果 Survivor 區有足夠的空間容納存活對象,那麼可以把存活對象放入 Survivor,多的對象放入老年區。

現在,我們把對象的大小調大。設置為 2M,這樣 Survivor 就無法存放下。

可以看到,在經過一次垃圾回收的時候(可以看到GC Time 上有波峰,說明執行了一次垃圾回收),但我們注意到,Survivor 區中並沒有被佔用。說明垃圾回收過程中,直接將存活對象放到了老年代中。

再來聊聊 survivor 區

對象通常在 Eden 區里誕生,如果經過第一次 MInor GC 后仍然存活,並且能夠被 Survivor 容納的話,該對象會被移動到 Survivor 區,並且將其年齡設置為 1 歲。對象在 Survivor 區每熬過一次 Minor GC,年齡就增加 1 歲,當它年齡增大到一定程度(默認是 15 歲),就會被晉陞到老年代。

特殊情況

有些時候,如果用戶創建了大對象,如很長的字符串或者元素很多的數組的時候。這種大對象都佔用大量的內存,像這種大對象,有很大概率是長時間使用的,不然為什麼要創建大對象。

如果大對象朝生夕滅,我們知道在 Java 8 中,新生代默認採用的 標記-複製 算法,那麼對於大對象而言,是非常耗時的。

所以,如果 JVM 設置了一個閾值,那麼當分配的對象大於這個閾值的時候,會直接被分配到老年代。

總結

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

angular 接入 IdentityServer4

angular 接入 IdentityServer4

Intro

最近把活動室預約的項目做了一個升級,預約活動室需要登錄才能預約,並用 IdentityServer4 做了一個統一的登錄註冊中心,這樣以後就可以把其他的需要用戶操作的應用統一到 IdentityServer 這裏,這樣就不需要在每個應用里都做一套用戶的機制,接入 IdentityServer 就可以了。

目前活動室預約的服務器端和基於 angular 的客戶端已經完成了 IdentityServer 的接入,並增加了用戶的相關的一些功能,比如用戶可以查看自己的預約記錄並且可以取消自己未開始的預約,

還有一個小程序版的客戶端暫時還未完成接入,所以小程序版目前暫時是不能夠預約的

為什麼要寫這篇文章

目前在網上看到很多都是基於 implicit 模式接入 IdentityServer,這樣實現起來很簡單,但是現在 OAuth 已經不推薦這樣做了,OAuth 推薦使用 code 模式來代替 implicit

implicit 模式會有一些安全風險,implicit 模式會將 accessToken 直接返回到客戶端,而 code 模式只是會返回一個 code,accessToken 和 code 的分離的兩步,implicit 模式很有可能會將 token 泄露出去

詳細可以參考 StackOverflow 上的這個問答

https://stackoverflow.com/questions/13387698/why-is-there-an-authorization-code-flow-in-oauth2-when-implicit-flow-works

除此之外,還有一個小原因,大多是直接基於 oidc-client 的 一個 npm 包來實現的,我是用了一個針對 angular 封裝的一個庫 angular-oauth2-oidc,如果你在用 angular ,建議你可以嘗試一下,針對 angular 做了一些封裝和優化,對 angular 更友好一些

準備接入吧

API 配置

預約系統的 API 和網站管理系統是在一起的,針對需要登錄才能訪問的 API 單獨設置了的 policy 訪問

services.AddAuthentication()
    .AddIdentityServerAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme, options =>
    {
        options.Authority = Configuration["Authorization:Authority"];
        options.RequireHttpsMetadata = false;

        options.NameClaimType = "name";
        options.RoleClaimType = "role";
    })
    ;

services.AddAuthorization(options =>
{
    options.AddPolicy("ReservationApi", builder => builder
        .AddAuthenticationSchemes(IdentityServerAuthenticationDefaults.AuthenticationScheme)
        .RequireAuthenticatedUser()
        .RequireScope("ReservationApi")
    );
});

需要授權才能訪問的接口設置 Authorize 並指定 Policy 為 ReservationApi

[Authorize(Policy = "ReservationApi")]
[HttpPost]
public async Task<IActionResult> MakeReservation([FromBody] ReservationViewModel model)

IdentityServer Client 配置

首先我們需要在 IdentityServer 這邊添加一個客戶端,因為我們要使用 code 模式,所以授權類型需要配置 authorization-code 模式,不使用 implicit 模式

允許的作用域(scope) 是客戶端允許訪問的 api 資源和用戶的信息資源,openid 必選,profile 是默認的用戶基本信息的集合,根據自己客戶端的需要進行配置,ReservationApi 是訪問 API 需要的 scope,其他的 scope 根據客戶端需要進行配置

angular 客戶端配置

安裝 angular-oauth2-oidc npm 包,我現在使用的是 9.2.0 版本

添加 oidc 配置:

export const authCodeFlowConfig: AuthConfig = {
  issuer: 'https://id.weihanli.xyz',

  // URL of the SPA to redirect the user to after login
  redirectUri: window.location.origin + '/account/callback',

  clientId: 'reservation-angular-client',

  dummyClientSecret: 'f6f1f917-0899-ef36-63c8-84728f411e7c',

  responseType: 'code',

  scope: 'openid profile ReservationApi offline_access',

  useSilentRefresh: false,

  showDebugInformation: true,

  sessionChecksEnabled: true,

  timeoutFactor: 0.01,

  // disablePKCI: true,

  clearHashAfterLogin: false
};

在 app.module 引入 oauth 配置

  imports: [
    BrowserModule,
    AppRoutingModule,
    AppMaterialModule,
    HttpClientModule,
    FormsModule,
    ReactiveFormsModule,
    BrowserAnimationsModule,
    OAuthModule.forRoot({
      resourceServer: {
        allowedUrls: ['https://reservation.weihanli.xyz/api'],
        sendAccessToken: true
      }
    })
  ]

OAuthModule 里 resourceServer 中的 allowedUrls 是配置的資源的地址,訪問的資源符合這個地址時就會自動發送 accessToken,這樣就不需要自己實現一個 interceptor 來實現自動在請求頭中設置 accessToken 了

在 AppComponment 的構造器中初始化 oauth 配置,並加載 ids 的發現文檔

export class AppComponent {
  constructor(
        private oauth: OAuthService
    ) {
    this.oauth.configure(authConfig.authCodeFlowConfig);
    this.oauth.loadDiscoveryDocument();
    }
    // ...
}

添加一個 AuthGuard,路由守衛,需要登錄才能訪問的頁面自動跳轉到 /account/login 自動登錄

AuthGuard:

import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { OAuthService } from 'angular-oauth2-oidc';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor(private router: Router, private oauthService: OAuthService) {}

  canActivate() {
    if (this.oauthService.hasValidAccessToken()) {
      return true;
    } else {
      this.router.navigate(['/account/login']);
      return false;
    }
  }
}

路由配置:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { ReservationListComponent } from './reservation/reservation-list/reservation-list.component';
import { NoticeListComponent } from './notice/notice-list/notice-list.component';
import { NoticeDetailComponent } from './notice/notice-detail/notice-detail.component';
import { AboutComponent } from './about/about.component';
import { NewReservationComponent } from './reservation/new-reservation/new-reservation.component';
import { LoginComponent } from './account/login/login.component';
import { AuthGuard } from './shared/auth.guard';
import { AuthCallbackComponent } from './account/auth-callback/auth-callback.component';
import { MyReservationComponent } from './account/my-reservation/my-reservation.component';

const routes: Routes = [
  { path: '', component: ReservationListComponent },
  { path: 'reservations/new', component:NewReservationComponent, canActivate: [AuthGuard] },
  { path: 'reservations', component: ReservationListComponent },
  { path: 'notice', component: NoticeListComponent },
  { path: 'notice/:noticePath', component: NoticeDetailComponent },
  { path: 'about', component: AboutComponent },
  { path: 'account/login', component: LoginComponent },
  { path: 'account/callback', component: AuthCallbackComponent },
  { path: 'account/reservations', component: MyReservationComponent, canActivate: [AuthGuard] },
  { path: '**', redirectTo: '/'}
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

AccountLogin 會將用戶引導到 ids 進行登錄,登錄之後會跳轉到配置的重定向 url,我配置的是 account/callback

import { Component, OnInit } from '@angular/core';
import { OAuthService } from 'angular-oauth2-oidc';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.less']
})
export class LoginComponent implements OnInit {

  constructor(private oauthService: OAuthService) {
  }

  ngOnInit(): void {
    // 登錄
    this.oauthService.initLoginFlow();
  }

}

Auth-Callback

import { Component, OnInit } from '@angular/core';
import { OAuthService } from 'angular-oauth2-oidc';
import { Router } from '@angular/router';

@Component({
  selector: 'app-auth-callback',
  templateUrl: './auth-callback.component.html',
  styleUrls: ['./auth-callback.component.less']
})
export class AuthCallbackComponent implements OnInit {

  constructor(private oauthService: OAuthService, private router:Router) {
  }

  ngOnInit(): void {
    this.oauthService.loadDiscoveryDocumentAndTryLogin()
    .then(_=> {
      this.oauthService.loadUserProfile().then(x=>{
        this.router.navigate(['/reservations/new']);
      });
    });
  }

}

More

當前實現還不太完善,重定向現在始終是跳轉到的新預約的頁面,應當在跳轉登錄之前記錄一下當前的地址保存在 storage 中,在 auth-callback 里登錄成功之後跳轉到 storage 中之前的地址

Reference

  • https://sunnycoding.cn/2020/03/14/angular-spa-auth-with-ocelot-and-ids4-part3/#i-2
  • https://github.com/OpenReservation/angular-client
  • https://github.com/manfredsteyer/angular-oauth2-oidc/
  • https://github.com/OpenReservation/ReservationServer

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案