琉歌美学 發表於 2019-11-14 16:01:00

angular数据请求 token验证

<p>angualr的token 验证会经常用在登录,注册等地方</p>
<p>对于token的使用方法按照以下步骤进行使用即可</p>
<p><strong><span style="color: rgba(255, 0, 0, 1)">1.</span></strong>新建一个服务&nbsp;</p>
<p> <span style="background-color: rgba(136, 136, 136, 1)"><strong> ng g service services /+服务名</strong></span></p>
<p><strong>&nbsp;</strong><span style="color: rgba(255, 0, 0, 1)"><strong>eg</strong>:</span><strong>ng g service services/player</strong></p>
<p>会在根目录下出现一个叫service的服务文件夹</p>
<p>文件夹中会存在一个<span style="color: rgba(255, 0, 0, 1)">player.service,ts</span>和一个<span style="color: rgba(255, 0, 0, 1)">player.service,spec.ts</span></p>
<p>&nbsp;</p>
<p><strong><span style="color: rgba(255, 0, 0, 1)">2.</span></strong>在根目录下新建一个文件夹,是用来封装token的写法&nbsp;</p>
<p>eg: 文件夹的名字为<span style="color: rgba(255, 0, 0, 1)">utils</span></p>
<ol>
<li><strong><span style="background-color: rgba(136, 136, 136, 1)">在文件夹中新建一个名字为token.util.ts的文件</span></strong></li>
<li><strong><span style="background-color: rgba(136, 136, 136, 1)">打开此文件</span></strong></li>
<li><span style="background-color: rgba(136, 136, 136, 1)"><strong>在此文件中注入并声明 import {Injectable,BgModule} from '@angular/core'</strong></span></li>
<li><strong><span style="background-color: rgba(136, 136, 136, 1)">声明引入的组件模块 @Injectable()&nbsp; &nbsp;@NgModule()</span></strong></li>
<li>开始进行封装</li>
</ol>
<p>  <span style="background-color: rgba(136, 136, 136, 1)"><strong>export default class TokenUtil{    </strong></span></p>
<p><span style="background-color: rgba(136, 136, 136, 1)"><strong>    private name:string = 'jwt-token'</strong></span></p>
<p><span style="background-color: rgba(136, 136, 136, 1)"><strong>     getToken():string {</strong></span></p>
<p><span style="background-color: rgba(136, 136, 136, 1)"><strong>        return localStorage.getItem(this.name)</strong></span></p>
<p><span style="background-color: rgba(136, 136, 136, 1)"><strong>     }</strong></span></p>
<p><span style="background-color: rgba(136, 136, 136, 1)"><strong>     setToken(token:string):void{</strong></span></p>
<p><span style="background-color: rgba(136, 136, 136, 1)"><strong>      localStorage.setItem(this.name,token)</strong></span></p>
<p><span style="background-color: rgba(136, 136, 136, 1)"><strong>    }</strong></span></p>
<p><span style="background-color: rgba(136, 136, 136, 1)"><strong>  }</strong></span></p>
<div><strong><span style="color: rgba(255, 0, 0, 1)">3.<span style="color: rgba(0, 0, 0, 1)">在app目录中新建文件夹http-interceptors</span></span></strong></div>
<div>
<ul>
<li><strong><span style="color: rgba(255, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">在此文件夹中新建index.ts文件和noop-interceptor.ts文件</span></span></strong></li>
<li><strong><span style="color: rgba(255, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">在index.ts中写入</span></span></strong></li>
</ul>
<p>    /*&nbsp;"Barrel"&nbsp;of&nbsp;Http&nbsp;Interceptors&nbsp;*/</p>
<p>    import&nbsp;{&nbsp;HTTP_INTERCEPTORS&nbsp;}&nbsp;from&nbsp;'@angular/common/http';</p>
<p>    import&nbsp;{&nbsp;NoopInterceptor&nbsp;}&nbsp;from&nbsp;'./noop-interceptor';</p>
<p>    /**&nbsp;Http&nbsp;interceptor&nbsp;providers&nbsp;in&nbsp;outside-in&nbsp;order&nbsp;*/</p>
<p>    export&nbsp;const&nbsp;httpInterceptorProviders&nbsp;=&nbsp;[</p>
<p>      {&nbsp;provide:&nbsp;HTTP_INTERCEPTORS,&nbsp;useClass:&nbsp;NoopInterceptor,&nbsp;multi:&nbsp;true&nbsp;},</p>
<p>    ];</p>
<ul>
<li class="_mce_tagged_br"><strong>在noop-inter-interceptor.ts文件中写入</strong></li>
</ul>
<ol>
<li class="_mce_tagged_br"><strong><strong>先引用注入</strong></strong>
<div>import&nbsp;TokenUtil&nbsp;from&nbsp;'../../utils/token.util'</div>
</li>
<li>
<div>import&nbsp;{&nbsp;AppRoutingModule&nbsp;}&nbsp;from&nbsp;'./app-routing.module';</div>
</li>
<li>
<div>@Injectable()</div>
</li>
<li>
<div>
<div>export&nbsp;class&nbsp;NoopInterceptor&nbsp;implements&nbsp;HttpInterceptor&nbsp;{</div>
<br>
<div>&nbsp;&nbsp;constructor(private&nbsp;tokenUtil:&nbsp;TokenUtil)&nbsp;{&nbsp;}</div>

<br>
<div>&nbsp;&nbsp;intercept(req:&nbsp;HttpRequest&lt;any&gt;,&nbsp;next:&nbsp;HttpHandler)</div>
<div>&nbsp;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Get&nbsp;the&nbsp;auth&nbsp;token&nbsp;from&nbsp;the&nbsp;service.</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;authToken&nbsp;=&nbsp;this.tokenUtil.getToken();</div>

<br>
<div>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Clone&nbsp;the&nbsp;request&nbsp;and&nbsp;replace&nbsp;the&nbsp;original&nbsp;headers&nbsp;with</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;cloned&nbsp;headers,&nbsp;updated&nbsp;with&nbsp;the&nbsp;authorization.</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;authReq&nbsp;=&nbsp;req.clone({</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers:&nbsp;req.headers.set('Authorization',&nbsp;`bearer&nbsp;${authToken}`)</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;});</div>

<br>
<div>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;send&nbsp;cloned&nbsp;request&nbsp;with&nbsp;header&nbsp;to&nbsp;the&nbsp;next&nbsp;handler.</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;next.handle(authReq);</div>
<div>&nbsp;&nbsp;}</div>
<div>}</div>

</div>
</li>
</ol></div>
<div>
<ul>
<li><strong><strong><span style="color: rgba(255, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">在app.module.ts中引用和注入新建的一系列文件 TokenUtil 和</span></span></strong></strong><span style="color: rgba(255, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">&nbsp;</span></span><strong>httpInterceptorProviders&nbsp;</strong>组件<strong><span style="color: rgba(255, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)"><br></span></span></strong></li>
<li>在<strong>@NgModule中的imports中</strong>声明一次&nbsp; </li>
</ul>
<ol>
<li>TokenUtil </li>
<li>ReactiveFormsModule</li>
</ol>
<ul>
<li><strong>在<span style="text-decoration: underline; color: rgba(255, 0, 0, 1)">providers</span>中进行一次(使用)</strong></li>
</ul>
<div>&nbsp;&nbsp;  providers:&nbsp;,</div>
<p>&nbsp;</p>
</div>
<p><strong><span style="color: rgba(255, 0, 0, 1)">4.</span></strong>在对应的组件中ts中进行一次使用 服务引用</p>
<div>  <strong>import&nbsp;{&nbsp;PlayerService}&nbsp;from&nbsp;'../../player.service';</strong></div>
<div>&nbsp;</div>
<div>
<div><strong>  constructor(private&nbsp;tokenUtil:&nbsp;TokenUtil,&nbsp;private&nbsp;route:&nbsp;ActivatedRoute)</strong></div>
<div>&nbsp;</div>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/rockyjs/p/11857991.html
頁: [1]
查看完整版本: angular数据请求 token验证