1. 程式人生 > >Laravel修改登入和註冊介面資料返回格式

Laravel修改登入和註冊介面資料返回格式

1、背景:需要將所有的資料返回格式統一成retCode/retMsg/data

2、登陸介面:

檔案目錄:app/Http/Controllers/Auth/LoginController

先寫登陸介面是因為修改登入介面比註冊介面要簡單許多

登入介面中的第一句

use AuthenticatesUsers;

可以進去修改登入驗證內容(預設是email+password登入),可以修改

validateLogin()或者直接修改username(),將email改成name,即可用name+password登入了

修改登入介面資料返回格式login()方法

public function login(Request $request)
    {
        $this->validateLogin($request);

        if ($this->attemptLogin($request)) {
            $user = $this->guard()->user();
            $user->generateToken();
            $ret=new RetObject();
            $ret->retCode="0000";
            $ret->retMsg='success';
            $ret->data= $user->toArray();
        }else{
            $ret=new RetObject();
            $ret->retCode="0001";
            $ret->retMsg='failed';
            $ret->data= null;
        }
        return response()->json($ret);
    }

直接修改login方法中的返回內容就可以了

3、註冊介面

一開始我都不知道register的介面到底是藏在哪

然後看routes/api.php裡的

Route::post('register', 'Auth\[email protected]');

這裡register介面指向的是RegisterController中的 register方法

但是在RegisterController沒有找到register方法,只有registered、validator、create這幾個方法

真正的register方法在第一句的

use RegistersUsers;
RegistersUsers的register
public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

這裡用到了RegisterController  中的registered、validator、create這幾個方法

成功的情況下,修改資料返回格式比較簡單

直接在RegisterController中的registered()方法中修改

 protected function registered(Request $request,$user)
    {
            $user->generateToken();
            $ret=new RetObject();
            $ret->retCode="0000";
            $ret->retMsg='register success';
            $ret->data= $user->toArray();
            return response()->json($ret);
            
    }

然後在哪裡捕捉異常然後失敗的時候修改資料返回格式,搗鼓了好久。

一開始嘗試直接在RegisterController中的registered()方法中使用try/catch捕捉異常資訊,但是每次Debug都不會跳進來,直接在更底層驗證的時候就直接輸出報錯資訊了。

try{
            $user->generateToken();
            $ret=new RetObject();
            $ret->retCode="0000";
            $ret->retMsg='register success';
            $ret->data= $user->toArray();
            return response()->json($ret);
        }catch (Exception $exception){
            $ret=new RetObject();
            $ret->retCode="0001";
            $ret->retMsg='register failed';
            $ret->data= null;
            return response()->json($ret);
        }

最終在app/Exception/Handler.php中

report方法是用來將異常寫入日誌,render是用來渲染各種異常的瀏覽器輸出

所以我們應該是在render中修改捕捉到異常之後返回資料的格式

public function render($request, Exception $exception)
    {
        // This will replace our 404 response with
        // a JSON response.
        if ($exception instanceof ModelNotFoundException &&
            $request->wantsJson())
        {
            $ret=new RetObject();
            $ret->retCode="404";
            $ret->retMsg='頁面未找到';
            $ret->data= null;
            return response()->json($ret);
        }elseif ($exception instanceof ValidationException)
        {
            $ret=new RetObject();
            $ret->retCode="0001";
            $ret->retMsg=$exception->getMessage();
            $ret->data= null;
            return response()->json($ret);
        }
        return parent::render($request, $exception);
    }

然後起碼是可以自定義捕捉到驗證資料異常ValidationException時候的返回資料格式了,還有其他的異常也是可以直接在Handler.php的render方法中新增。

補充一下Handler的異常處理的控制器基類:目錄為vendor/laravel/framework/src/Illuminate/Foundation/Exception/Handler.php

中的report和render方法

 public function report(Exception $e)
    {
        if ($this->shouldntReport($e)) {
            return;
        }

        try {
            $logger = $this->container->make(LoggerInterface::class);
        } catch (Exception $ex) {
            throw $e; // throw the original exception
        }

        $logger->error($e);
    }
public function render($request, Exception $e)
    {
        $e = $this->prepareException($e);

        if ($e instanceof HttpResponseException) {
            return $e->getResponse();
        } elseif ($e instanceof AuthenticationException) {
            return $this->unauthenticated($request, $e);
        } elseif ($e instanceof ValidationException) {
            return $this->convertValidationExceptionToResponse($e, $request);
        }

        return $this->prepareResponse($request, $e);
    }


相關推薦

Laravel修改登入註冊介面資料返回格式

1、背景:需要將所有的資料返回格式統一成retCode/retMsg/data2、登陸介面:檔案目錄:app/Http/Controllers/Auth/LoginController先寫登陸介面是因為修改登入介面比註冊介面要簡單許多登入介面中的第一句use Authenti

使用者登入註冊介面(html ajax)

使用者名稱密碼的登入頁面(點選註冊跳轉到註冊頁面) </html>login.html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> &l

iOS登入介面註冊介面

- (void)addLoginBackgroundView:(CGRect)frame{     CGFloat backgroundX = 30;     CGFloat backgroundY = 160;     CGFloat backgroundW = frame.size.width -

MVP登入註冊頁面Activity類 生成二維碼 異常捕獲類

1.分包效果 bean包:json格式轉成java程式碼 MVP model層:loginModel package com.jia.logindemo.model; import com.google.common.io.CharStreams; import com.goo

HTTPClient獲取介面資料返回JSON

public static String getDataJson(String url, Integer pageNo, Integer pageSize, String search) { HttpPost httpPost = null; try { CloseableHttp

百度t7 教程 node 初步4 使用者登入 註冊1

基本架構 回顧:  index.js let http = require('http') let fs = require('fs') let url = require('url') let mysql=require('mysql') // 建立個 伺服器

簡易登入以及註冊介面製作

以下為登入和註冊頁面的圖片 登入: 註冊: 先介紹登入頁面 以下為登入的html <input id="username" type="text" placeholder="請輸入使用者名稱"> <input id="password" type="passw

使用PHP實現使用者登入註冊的功能

使用PHP實現使用者登入和註冊的功能,相信很多同學都可以寫的出來用PHP實現登入註冊的功能了,給一些剛入門的PHP程式設計師,給你們指路了。 登陸介面 login.php 1 2 3 4 5 6 7 8

HTML-css-JavaScript實現簡單登入註冊功能,並讓登入註冊在同一頁內切換。

(水平有限,如果發現有什麼問題,歡迎指出來) HTML+css先做出來一個登入頁,包括基本的輸入框和button。再做一個註冊頁。程式碼如下: 隨後解釋程式碼 <form id="register" name="myForm" class="register"

android與java web互動完成簡單的登入註冊

   本文的知識點包括android客戶端的網路程式設計、訊息機制、IO流、多執行緒和java web伺服器端的servlet、資料庫操作、javabean技術、工具類和測試類的使用。 客戶端 執行效果圖 佈局檔案 activity_main.xml <

簡單的純java語言登入註冊功能

**Main.java** package com.su.main; public class Main { public static void main(String[] args) { // TODO Auto-genera

例項詳解js實現登入註冊介面

本文主要為大家詳細介紹了js實現登入與註冊介面,具有一定的參考價值,感興趣的小夥伴們可以參考一下,希望能幫助到大家。     完成登入與註冊頁面的HTML+CSS+JS,其中的輸入項檢查包括: 使用者名稱6-12位 首字母不能是數字 只能包含字母和數字

Ubuntu 14.04 或者16.04開啟root賬戶登入圖形介面登入root時候的報錯解決方法

1.開啟終端 2.輸入sudo vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 3.新增一行:greeter-show-manual-login=true 儲存關閉。 4.給root設定密碼,在中端中輸入:sudo p

Java程式---學生管理系統的登入註冊

/** * * 使用者資訊類,描述了使用者的資訊 * */ public class User { /** * 成員變數 * * */ private String username ; private String password;

用c#實現簡單的登入註冊功能

      這兩天c#大作業要求做一個簡單的通訊錄系統,我就先做了登入和註冊的功能,在網上看了一些程式碼,自己再做,終於做出來了。做的不是很美觀,但是可以簡單實現。    首先用sqlserver建表。我建了一個名為user_info的表,新增username和passdwo

Android中使用 SQLite 建立資料庫實現登入註冊

首先,說一下SQLite的概念: SQLite 是一個開源的嵌入式關係資料庫,它可以減少應用程式管理資料的開銷 , SQLite 可移植性好 、 很容易使用 、 很小 、 高效而且可靠 。目前在Android 系統中整合的是 SQLite3 版本 ,SQLite 不支援

flask-web開發中登入註冊功能的實現

目錄如下: my_flasky │ config.py │ config.pyc │ data-dev.sqlite │ manage.py │ └─app │ models.py │ models.pyc │ __

jsp+Servlet+javaBean實現登入註冊

目錄: 資料庫設計: CREATE SCHEMA `student` ; CREATE TABLE `student`.`user` ( `id` INT NOT NULL AUTO_INCREMENT , `user` VARCHAR(45) NOT NULL

教你寫一個炫酷的Material Design 風格的登入註冊頁面

每個人都會喜歡漂亮的登入介面,一個App 給人們的第一印象是非常重要的。 這篇文章將教你使用谷歌材料設計規範(Material design spec )和谷歌的新的設計支援庫( design support library)來建立一個炫酷的登入和註冊介面。設

(資料庫)Android登入註冊介面簡單實現。

本文使旨在用最簡單的Demo來實現原理,有不足之處歡迎指出,多多包涵,大家一起交流~ 1、一般兄弟們看這篇文章應該對資料庫多少有些瞭解,簡潔說SQL是Structured Query Languag