成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

小白的邊學(xué)邊寫,一個(gè)基于laravel的APP接口【API】(二)

skinner / 2647人閱讀

摘要:當(dāng)注冊成功以后,我們應(yīng)該立即返回確認(rèn)用戶登錄的值,并且作為的變量給儲(chǔ)存起來,直到退出時(shí)刪除,或者超出時(shí)間后刪除。在文檔里也有提及,對,就是那個(gè)叫的東東。用戶信息也被正常寫入,之后就可以歡快的擴(kuò)展注冊機(jī)制啦。

前言

根據(jù)上一篇文章,我們已經(jīng)吧dingo/api給安裝并且調(diào)試好了,那么下一步,就是來完善咱們的API了。
最首要的步驟一定是要先把注冊的功能給完善了,好了,那就給第一條正式API起個(gè)名字吧——

http://localhost/register

首先先對這條API進(jìn)行分析。這是一個(gè)用戶注冊的API,新用戶通過訪問它來注冊賬號(hào),之后才能有權(quán)限進(jìn)行其他的操作,享受其它的APP服務(wù)。那么我們在訪問的時(shí)候,就應(yīng)當(dāng)把正確的信息輸入進(jìn)去,因?yàn)榭蛻舳耸茿PP,所以要輸入的字段應(yīng)該是這些——(手機(jī)號(hào))phone、(密碼)password。
那么在一切準(zhǔn)備就緒以后,當(dāng)服務(wù)器處理完操作以后,我們又該獲得什么callback呢?
接下來就是我自己作為一個(gè)新手小白的個(gè)人理解了。當(dāng)注冊成功以后,我們應(yīng)該立即返回確認(rèn)用戶登錄的token值,并且作為APP的config變量給儲(chǔ)存起來,直到退出時(shí)刪除,或者超出時(shí)間后刪除。

分析完畢,開始實(shí)踐

在開始之前呢,我們要在項(xiàng)目里安裝JWT(JSON WEB TOKEN),這是一種API的驗(yàn)證方式,詳細(xì)的部分可以去看文檔,它的主要作用就是在客戶端的用戶發(fā)出注冊和登錄的請求之后,返回一串token值,在之后成功登錄以后以這個(gè)token值作為憑證來驗(yàn)證是否有獲取資源的權(quán)限。

如何安裝請看這個(gè)JWT

確定安裝好JWT以后,首先就來創(chuàng)建路由吧。
首先打開routes.php,修改路由

Route::post("/register", "AuthAuthenticateController@register");

然后創(chuàng)建一個(gè)控制器,在laravel項(xiàng)目下運(yùn)行

php artisan make:controller Auth/AuthenticateController

接下來,
我們直接用純html頁面當(dāng)做APP,去測試API,創(chuàng)建新的test文件夾,結(jié)構(gòu)如下

test/
├── css/
│   └── bootstrap.min.css
├── js/
│   ├── jquery.min.js
│   └── bootstrap.min.js
├── fonts/
│   ├── glyphicons-halflings-regular.eot
│   ├── glyphicons-halflings-regular.svg
│   ├── glyphicons-halflings-regular.ttf
│   ├── glyphicons-halflings-regular.woff
│   └── glyphicons-halflings-regular.woff2
└── register.html

在register.html文件里添加內(nèi)容



    
      
      
      
      注冊
      
    
    
        
        
注冊

AuthenticateController里添加如下函數(shù)

only("email", "password");

        try {
            // attempt to verify the credentials and create a token for the user
            if (! $token = JWTAuth::attempt($credentials)) {
                return response()->json(["error" => "invalid_credentials"], 401);
            }
        } catch (JWTException $e) {
            // something went wrong whilst attempting to encode the token
            return response()->json(["error" => "could_not_create_token"], 500);
        }

        // all good so return the token
        return response()->json(compact("token"));
    }

    public function register(Request $request) {

        $newUser = [ 
            "name" => $request->get("name"),
            "phone" => $request->get("phone"),
            "password" => bcrypt($request->get("password")),
        ];
        $user = User::create($newUser);
        $token = JWTAuth::fromUser($user);

        return response()->json(compact("token"));
    }
}

例子很簡單,就是儲(chǔ)存請求的數(shù)據(jù)然后返回token值。

這里就不得不來說說我遇到的一個(gè)大坑

其實(shí)按照以上的代碼完全可以將新用戶寫入數(shù)據(jù)庫的。但是!
token值不能被返回!這就讓人很頭大了。于是我又看了看文章,發(fā)現(xiàn)以上的那些操作叫做跨域請求。在laravel文檔里也有提及,對,就是那個(gè)叫jsonp的東東。于是又看了些文章,把a(bǔ)jax方法修改成了這個(gè)樣子

$.ajax({
    type: "get",
    url: "http://localhost/register",
    data: $(this).serialize(),
    async: false,
    dataType:"jsonp",
    jsonp: "callback"
    success: function(data){
        alert(JSON.stringify(data)); 
    },
    complete: function(){
        alert("ok");
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert(XMLHttpRequest.status);
        alert(XMLHttpRequest.readyState);
        alert(textStatus);
    }
});

這下又可以寫進(jìn)去了,但是呢!還是沒有token值的出現(xiàn)。。。
而且呢,請求方式也被換成了get,這是為什么呢?后來才知道這是因?yàn)?b>jsonp和post根本不可能實(shí)現(xiàn),或者說實(shí)現(xiàn)起來太難,所以我也就不為難自己了。我到那時(shí)就完全的跑偏了。。。又把ajax的方法改了回去,打開控制臺(tái),再試一遍,才發(fā)現(xiàn),原來想要實(shí)現(xiàn)跨域,要在請求的header中加入Access-Control-Allow-Origin屬性。
這下子感覺有希望了,于是立即創(chuàng)建一個(gè)http中間件吧。

php artisan make:middleware AccessMiddleware

在里面寫上


記得在kernel.php文件中注冊中間件喲,在$routeMiddleware里添加

"access" => AppHttpMiddlewareAccessMiddleware::class,

接下來再來修改路由

Route::group(["middleware" => "access"], function () {
    Route::post("/register","AuthAuthenticateController@register");
});

然后再來測試一下,輸入表單,點(diǎn)立即注冊,之后bingo,token值出來了。

用戶信息也被正常寫入,之后就可以歡快的擴(kuò)展注冊機(jī)制啦。
在這里先規(guī)劃一下吧。首先在控制器內(nèi)添加表單驗(yàn)證,然后返回不同的json數(shù)據(jù)給客戶端。但是畢竟我不是專業(yè)的,我只是愛好這個(gè)才去寫這些東西的,關(guān)于應(yīng)該返回什么數(shù)據(jù)現(xiàn)在腦子里還是一片混亂。如果有大神偶然間看到了我的這篇文章,希望可以給我一點(diǎn)指導(dǎo)和建議,十分的感謝!

最后

上面的例子完全是我自己看文檔+原創(chuàng)給整出來的,如果有錯(cuò)請及時(shí)告訴我喲~
上面的例子到最后雖然都實(shí)現(xiàn)了,但是我仍然覺得很 low,畢竟個(gè)人的智慧還是有限的。如果大家有對這個(gè)十分感興趣,可以聯(lián)系我,咱們可以一起邊學(xué)邊做,共同進(jìn)步!我的郵箱:[email protected]
如果恰巧大神路過,請務(wù)必給我一些指導(dǎo),小白將萬分的感謝 O(∩_∩)O~~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/35772.html

相關(guān)文章

  • 小白學(xué)邊寫,一個(gè)基于laravelAPP接口API】(

    摘要:當(dāng)注冊成功以后,我們應(yīng)該立即返回確認(rèn)用戶登錄的值,并且作為的變量給儲(chǔ)存起來,直到退出時(shí)刪除,或者超出時(shí)間后刪除。在文檔里也有提及,對,就是那個(gè)叫的東東。用戶信息也被正常寫入,之后就可以歡快的擴(kuò)展注冊機(jī)制啦。 前言 根據(jù)上一篇文章,我們已經(jīng)吧dingo/api給安裝并且調(diào)試好了,那么下一步,就是來完善咱們的API了。最首要的步驟一定是要先把注冊的功能給完善了,好了,那就給第一條正式API...

    jlanglang 評論0 收藏0
  • 小白學(xué)邊寫,一個(gè)基于laravelAPP接口API】(一)

    摘要:前期準(zhǔn)備原文地址前言,為什么做以及要做個(gè)啥本人姓小名白,不折不扣編程屆小白一名,但是自從大一那會(huì)兒接觸到編程這件奇妙的事情,就完完全全的陷入的程序的世界??蚣?,是我最喜歡的框架了,沒有之一。 前期準(zhǔn)備 原文地址前言,為什么做以及要做個(gè)啥本人姓小名白,不折不扣編程屆小白一名,但是自從大一那會(huì)兒接觸到編程這件奇妙的事情,就完完全全的陷入的程序的世界。這不,最近又開始折騰APP了,話說現(xiàn)在開...

    Nosee 評論0 收藏0
  • 小白學(xué)邊寫,一個(gè)基于laravelAPP接口API】(一)

    摘要:前期準(zhǔn)備原文地址前言,為什么做以及要做個(gè)啥本人姓小名白,不折不扣編程屆小白一名,但是自從大一那會(huì)兒接觸到編程這件奇妙的事情,就完完全全的陷入的程序的世界??蚣?,是我最喜歡的框架了,沒有之一。 前期準(zhǔn)備 原文地址前言,為什么做以及要做個(gè)啥本人姓小名白,不折不扣編程屆小白一名,但是自從大一那會(huì)兒接觸到編程這件奇妙的事情,就完完全全的陷入的程序的世界。這不,最近又開始折騰APP了,話說現(xiàn)在開...

    StonePanda 評論0 收藏0

發(fā)表評論

0條評論

skinner

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<