2017-05-25 145 views
5

我設置了密碼授權(它是應用程序的後端)。現在,我可以發送郵件請求到oauth/token,它適用於郵差。但是,如果我想從api註冊用戶呢?使用Laravel Passport註冊用戶

我知道我可以使用當前的/register路線,但是,那麼我是否需要將用戶重定向回登錄頁面,然後用他的憑據再次登錄?

或者在RegisterController中,在registered()函數中,我該怎麼做我重定向到oauth/token路由? (爲此,請注意,我發送了'x-www-form-urlencoded'中的所有5個數據,並且它似乎能夠工作。但是,我需要將頭部中的某些部分分開嗎?對我來說很模糊,所以只是想要詢問我什麼時候有機會)。

或者我應該在oauth/token方法中添加一些東西,如this guy?實際上,我試圖在庫中的[email protected]方法上發現$request的數據,但我無法弄清楚如何操作parsedBody數組。如果我從實際庫中觸發我的註冊功能,我怎麼知道它是註冊還是登錄?

也許我錯過了一些信息,但我找不到任何基於此主題的內容。在Passport中處理註冊用戶的正確方法是什麼?

回答

4

在您的API創建的路線爲

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

而且在UsersController創建方法create()

function create(Request $request) 
{ 
    /** 
    * Get a validator for an incoming registration request. 
    * 
    * @param array $request 
    * @return \Illuminate\Contracts\Validation\Validator 
    */ 
    $valid = validator($request->only('email', 'name', 'password','mobile'), [ 
     'name' => 'required|string|max:255', 
     'email' => 'required|string|email|max:255|unique:users', 
     'password' => 'required|string|min:6', 
     'mobile' => 'required', 
    ]); 

    if ($valid->fails()) { 
     $jsonError=response()->json($valid->errors()->all(), 400); 
     return \Response::json($jsonError); 
    } 

    $data = request()->only('email','name','password','mobile'); 

    $user = User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
     'mobile' => $data['mobile'] 
    ]); 

    // And created user until here. 

    $client = Client::where('password_client', 1)->first(); 

    // Is this $request the same request? I mean Request $request? Then wouldn't it mess the other $request stuff? Also how did you pass it on the $request in $proxy? Wouldn't Request::create() just create a new thing? 

    $request->request->add([ 
     'grant_type' => 'password', 
     'client_id'  => $client->id, 
     'client_secret' => $client->secret, 
     'username'  => $data['email'], 
     'password'  => $data['password'], 
     'scope'   => null, 
    ]); 

    // Fire off the internal request. 
    $token = Request::create(
     'oauth/token', 
     'POST' 
    ); 
    return \Route::dispatch($token); 
} 

和創建新用戶後,返回訪問令牌。