Spanish (Español) translation by Elías Nicolás (you can also view the original English article)



Este tutorial forma parte de la serie Creando su Startup con PHP en Envato Tuts +. En esta serie, te estoy guiando a través del lanzamiento de un inicio de concepto a realidad utilizando mi aplicación de Meeting Planner como un ejemplo de la vida real. Cada paso a lo largo del camino, voy a lanzar el código de Meeting Planner como código abierto como ejemplo del que puede aprender. También me ocuparé de asuntos relacionados con el inicio de negocios a medida que surjan.
En este tutorial, te guiaré a través de la implementación de la integración de OAuth con redes sociales comunes para que la inscripción y el uso repetido sean más fáciles y eficientes. Exploraré Facebook, Google, Twitter y LinkedIn, las redes que considero las más apropiadas para los usuarios que Meeting Planner busca.
Todo el código para Meeting Planner está escrito en el framework Yii2 para PHP. Si desea obtener más información sobre Yii2, consulte nuestra serie paralela Programación con Yii2 en Envato Tuts+.
Si todavía no ha probado Meeting Planner, trate de programar su primera reunión ahora. Está realmente empezando a completarse este año. En última instancia, pude usar el soporte incorporado de AuthClient de Yii2 para proporcionar la conexión de todas las redes de arriba, así que puedes usarlas para registrarte ahora.
La regeneración es agradable. Si tiene alguna pregunta o sugerencia de tema, publique un comentario a continuación. También puede contactarme en Twitter @reifman.
¿Qué es AuthClient?
AuthClient es el soporte integrado de Yii para que sus aplicaciones se autentiquen a través de servicios de terceros con OpenID, OAuth u OAuth2.
Si siguió mi serie Yii2 en junio de 2015, me habrías visto usando AuthClient para integrar con Google a través de OpenID, pero la compañía terminó su soporte para la especificación poco después. Luego, en diciembre, escribí un tutorial que usaba la extensión Yii2-User para agregar soporte de Google OAuth— el framework Yii2 aún no lo tenía. Sin embargo, Yii2-User no se integra bien con las bases de código establecidas que ya tienen una base de código orientada al usuario. Pero afortunadamente, el framework Yii2 desde entonces había añadido soporte para Google OAuth, y todo se ha vuelto más sencillo.
En este tutorial, te guiaré a través del uso de la nueva funcionalidad de AuthClient para integrarte con una variedad de redes sociales populares. Fuera de la caja, Yii proporciona soporte para los siguientes clientes:
Otra motivación para apoyar la conexión a Meeting Planner a través de las redes sociales es que permite a las personas a aparecer y compartir fácilmente su nombre y correo electrónico con nosotros. Con el registro de correo electrónico y contraseña, en realidad nunca aprendemos su nombre. Sin embargo, Twitter, a diferencia de otras redes sociales, crea barreras significativamente problemáticas para la obtención de direcciones de correo electrónico de los usuarios, lo que finalmente me llevó a desactivarlo por ahora.
Comencemos con la integración del código.
Instalación de AuthClient en nuestra aplicación
Primero, necesitamos instalar los componentes Yii para OAuth, el AuthClient de Yii.
Añadir AuthClient al Composer
Añadamos la biblioteca AuthClient a composer.json:
1 |
"minimum-stability": "stable", |
2 |
"require": { |
3 |
"php": ">=5.4.0", |
4 |
"yiisoft/yii2": "*", |
5 |
"yiisoft/yii2-bootstrap": "*", |
6 |
"yiisoft/yii2-swiftmailer": "*", |
7 |
"2amigos/yii2-google-maps-library": "*", |
8 |
"2amigos/yii2-google-places-library": "*", |
9 |
"stichoza/google-translate-php": "~2.0", |
10 |
"2amigos/yii2-date-time-picker-widget": "*", |
11 |
"yiisoft/yii2-jui": "*", |
12 |
"cebe/yii2-gravatar": "*", |
13 |
"kartik-v/yii2-widget-fileinput": "*", |
14 |
"kartik-v/yii2-widget-switchinput": "*", |
15 |
"yiisoft/yii2-imagine": "*", |
16 |
"2amigos/yii2-resource-manager-component": "0.1.*", |
17 |
"yiisoft/yii2-authclient": "~2.0.0" |
18 |
},
|
Entonces, necesitamos actualizar al composer:
1 |
sudo composer update
|
2 |
Password: |
3 |
Loading composer repositories with package information |
4 |
Updating dependencies (including require-dev) |
5 |
- Updating 2amigos/yii2-date-time-picker-widget (0.1.0 => 0.1.1) |
6 |
Checking out 572e2448ba1cd207b339dd5d117e3d1d23f0bbc3 |
7 |
|
8 |
- Installing yiisoft/yii2-authclient (2.0.2) |
9 |
Loading from cache |
10 |
|
11 |
Writing lock file |
12 |
Generating autoload files |
Configuración AuthClient
Y,
necesitamos agregar la configuración de configuración de AuthClient a
su archivo de configuración en \frontend\config\main.php
Agregue elementos de array para todos los servicios de terceros que desee admitir (los detalles de cada uno se pueden encontrar en la Guía de AuthClient):
1 |
'components' => [ |
2 |
'authClientCollection' => [ |
3 |
'class' => 'yii\authclient\Collection', |
4 |
'clients' => [ |
5 |
'facebook' => [ |
6 |
'class' => 'yii\authclient\clients\Facebook', |
7 |
'clientId' => $config['oauth_fb_id'], |
8 |
'clientSecret' => $config['oauth_fb_secret'], |
9 |
],
|
10 |
'google' => [ |
11 |
'class' => 'yii\authclient\clients\GoogleOAuth', |
12 |
'clientId' => $config['oauth_google_client_id'], |
13 |
'clientSecret' => $config['oauth_google_client_secret'], |
14 |
],
|
15 |
'linkedin' => [ |
16 |
'class' => 'yii\authclient\clients\LinkedIn', |
17 |
'clientId' => $config['linkedin_client_id'], |
18 |
'clientSecret' => $config['linkedin_client_secret'], |
19 |
],
|
20 |
'twitter' => [ |
21 |
'class' => 'yii\authclient\clients\Twitter', |
22 |
'consumerKey' => $config['oauth_twitter_key'], |
23 |
'consumerSecret' => $config['oauth_twitter_secret'], |
24 |
],
|
25 |
],
|
26 |
],
|
Para obtener códigos para todas esas claves y secretos, debe registrar su aplicación en cada red social. Esto puede llevar mucho tiempo.
Registro de aplicaciones para desarrolladores
Siga a lo largo de que te guíe a través del registro con algunas de las redes y algunos de los aspectos de configuración más profundos.
Registrarse con Twitter
Crear una nueva aplicación de Twitter en el panel de aplicaciones de Twitter:



Haga
clic en Crear nueva aplicación: descubrí que la URL de devolución de
llamada era innecesaria, pero por ahora utilicé http://mydomain.com/user/security/auth.



Esta es la nueva página de nuestra aplicación:



Aquí está la página Configuración:



Aquí están las claves y las fichas de acceso. Aquí, necesitamos copiar la Consumer Key (API Key) y el Consumer Secret (API Secret):



Esas llaves van en nuestro archivo mp.ini, que se lee en la variable $config arriba para configurar AuthClient para Twitter.
Registrar la aplicación en Facebook
A continuación, vayamos a la consola de desarrolladores de Facebook y añada una nueva aplicación:



Elegiremos crear una aplicación de Sitio Web WWW por ahora:



Proporcione el nombre de nuestra aplicación:



Y recopile nuestro nuevo ID de aplicación:



Piden toda la información regular, como URLs:



Y luego puede encontrar nuestra aplicación Meeting Planner en la lista:



Aquí está el panel de Facebook para su aplicación:



Registrarse en Google
Las API de Google son un poco más complejas que Twitter y Facebook, por lo que el UX es un poco más difícil de seguir. Pero básicamente, una vez que creas una aplicación, necesitas las claves de OAuth 2.0, que puedes obtener al abrir el área de la aplicación en la pantalla de credenciales:



Eso te lleva aquí:



Por motivos de seguridad, Google (y LinkedIn) requieren una lista completa de las rutas y parámetros de URL que se pueden utilizar durante una secuencia de OAuth. Mientras que en el desarrollo, esto puede requerir un montón de ajuste, incluso para las pruebas de localhost.
Una vez que los haya ingresado, los verá a continuación:



Google hace un buen trabajo al ayudarle a configurar la pantalla de consentimiento que sus usuarios verán cuando intenten inscribirse o vincular su cuenta de Google a Meeting Planner:



Registrarse con LinkedIn
LinkedIn es bastante simple en comparación con Google. Requiere los detalles básicos para su aplicación:



Al igual que Google, que requieren todas las direcciones URL que va a utilizar en el desarrollo y la producción. También puede obtener las claves en esta página:



Colocar claves en nuestro archivo de configuración
En la protección de sus claves de GitHub, he descrito en detalle cómo uso un archivo de configuración para almacenar todas mis claves aparte de mi repositorio GitHub. A continuación, incluyo este archivo al principio de los archivos de configuración de Yii. Esto me impide accidentalmente subir mis llaves a mi repositorio y comprometer mis cuentas.
Colocamos las claves y secretos de la aplicación de Twitter y Facebook en /var/secure/mp.ini fuera del repositorio:
1 |
oauth_fb_id="154xxxxxxxxxxxxxx33" |
2 |
oauth_fb_secret="bcxxxxxxxxxxxxxxdda" |
3 |
oauth_twitter_key ="JCpxxxxxxxxxxxxxxnsF" |
4 |
oauth_twitter_secret="f3xxxxxxxxxxxxxxxxxxxxxxxxxxxxu37" |
5 |
oauth_twitter_token="153xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxfBj" |
6 |
oauth_twitter_token_secret="Synxxxxxxxxxxxxxxxxxxxxxxxxxxxx4X" |
7 |
oauth_google_client_id = "1xxxxxxxxxxxxxxxxxxxxxxq.apps.googleusercontent.com" |
8 |
oauth_google_client_secret = "cfkxxxxxxxxxxxxxxox" |
9 |
linkedin_client_id = "7xxxxxxxxxxxxxxq" |
10 |
linkedin_client_secret ="IxxxxxxxxxxxxxxI" |
Aquí
de nuevo el código en \frontend\config\main.php que incluye estas
configuraciones y establece las variables de configuración individuales:
1 |
<?php |
2 |
$config = parse_ini_file('/var/secure/mp.ini', true); |
3 |
|
4 |
$params = array_merge( |
5 |
require(__DIR__ . '/../../common/config/params.php'), |
6 |
require(__DIR__ . '/../../common/config/params-local.php'), |
7 |
require(__DIR__ . '/params.php'), |
8 |
require(__DIR__ . '/params-local.php') |
9 |
); |
10 |
|
11 |
return [ |
12 |
'id' => 'app-frontend', |
13 |
'basePath' => dirname(__DIR__), |
14 |
'bootstrap' => ['log'], |
15 |
'controllerNamespace' => 'frontend\controllers', |
16 |
'components' => [ |
17 |
'authClientCollection' => [ |
18 |
'class' => 'yii\authclient\Collection', |
19 |
'clients' => [ |
20 |
'google' => [ |
21 |
'class' => 'yii\authclient\clients\GoogleOpenId' |
22 |
],
|
23 |
'facebook' => [ |
24 |
'class' => 'yii\authclient\clients\Facebook', |
25 |
'clientId' => $config['oauth_fb_id'], |
26 |
'clientSecret' => $config['oauth_fb_secret'], |
27 |
],
|
28 |
'twitter' => [ |
29 |
'class' => 'yii\authclient\clients\Twitter', |
30 |
'consumerKey' => $config['oauth_twitter_key'], |
31 |
'consumerSecret' => $config['oauth_twitter_secret'], |
32 |
],
|
33 |
],
|
34 |
],
|
35 |
'urlManager' => [ |
Actualización del esquema para almacenar claves de sesión
Ahora
que estamos listos para escribir código para integrar la suscripción
social y el inicio de sesión, necesitamos la base de datos para crear
una tabla Auth que almacenará el servicio social, su ID para la persona y
el user_id para esa persona en Meeting Planner:
1 |
./yii migrate/create create_auth_table |
2 |
Yii Migration Tool (based on Yii v2.0.2) |
3 |
|
4 |
Create new migration '/Users/Jeff/Sites/mp/console/migrations/m150227_235635_create_auth_table.php'? (yes|no) [no]:yes |
5 |
New migration created successfully. |
A continuación, le mostramos la migración:
1 |
<?php |
2 |
|
3 |
use yii\db\Schema; |
4 |
use yii\db\Migration; |
5 |
|
6 |
class m150227_235635_create_auth_table extends Migration |
7 |
{
|
8 |
public function up() |
9 |
{
|
10 |
$tableOptions = null; |
11 |
if ($this->db->driverName === 'mysql') { |
12 |
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; |
13 |
}
|
14 |
|
15 |
$this->createTable('{{%auth}}', [ |
16 |
'id' => Schema::TYPE_PK, |
17 |
'user_id' => Schema::TYPE_BIGINT.' NOT NULL', |
18 |
'source' => Schema::TYPE_STRING.' NOT NULL', |
19 |
'source_id' => Schema::TYPE_STRING.' NOT NULL', |
20 |
], $tableOptions); |
21 |
$this->addForeignKey('fk-auth-user_id-user-id', '{{%auth}}', 'user_id', '{{%user}}', 'id', 'CASCADE', 'CASCADE'); |
22 |
}
|
23 |
|
24 |
public function down() |
25 |
{
|
26 |
$this->dropForeignKey('fk-auth-user_id-user-id', '{{%auth}}'); |
27 |
$this->dropTable('{{%auth}}'); |
28 |
}
|
29 |
}
|
Aquí está el resultado cuando lo ejecutamos:
1 |
./yii migrate/up |
2 |
Yii Migration Tool (based on Yii v2.0.2) |
3 |
|
4 |
Total 1 new migration to be applied: |
5 |
m150227_235635_create_auth_table |
6 |
|
7 |
Apply the above migration? (yes|no) [no]:yes |
8 |
*** applying m150227_235635_create_auth_table
|
9 |
> create table {{%auth}} ... done (time: 0.016s) |
10 |
> add foreign key fk-auth-user_id-user-id: {{%auth}} (user_id) references {{%user}} (id) ... done (time: 0.012s) |
11 |
*** applied m150227_235635_create_auth_table (time: 0.033s) |
12 |
|
13 |
Migrated up successfully. |
Una vez más, utilicé el generador de código Gii de Yii para crear el modelo Auth:



En última instancia, la tabla Auth almacenará contenido como este:



Agregue el widget AuthChoice a Meeting Planner
El widget AuthChoice de Yii2 hace un excelente trabajo al implementar los botones de inicio de sesión para cada servicio que configure. Y lo hace en el orden en que se configura la gama de servicios y claves (para que pueda cambiarlo).
Es muy sencillo agregar el widget a nuestros formularios en login.php y signup.php:
1 |
<div class="row"> |
2 |
<div class="col-lg-5"> |
3 |
<p>Or, login with one of the following services:</p> |
4 |
<?= yii\authclient\widgets\AuthChoice::widget([ |
5 |
'baseAuthUrl' => ['site/auth','mode'=>'login'], |
6 |
'popupMode' => false, |
7 |
]) ?> |
8 |
</div> <!-- end col-lg-5 --> |
9 |
</div> <!-- end row --> |
Aquí está nuestra página de registro:



Para los usuarios existentes que han iniciado sesión, he creado una forma sencilla para que puedan vincular su cuenta. Se llama Link Social Accounts en la página de configuración del perfil:



Si hace clic en LinkedIn, aquí está su pantalla OAuth que le pedirá que dé permiso a Meeting Planner:



Y aquí está la pantalla de Google:



Pero ¿qué pasa realmente cuando el usuario nos permite compartir sus datos de cuenta social? Vamos a pasar por el código que he escrito para procesar las acciones de los usuarios.
Procesando el permiso de OAuth
El \frontend\controllers\SiteController.php procesa la acción de auth entrante a la función onAuthSuccess:
1 |
/**
|
2 |
* @inheritdoc
|
3 |
*/
|
4 |
public function actions() |
5 |
{
|
6 |
return [ |
7 |
'error' => [ |
8 |
'class' => 'yii\web\ErrorAction', |
9 |
],
|
10 |
'captcha' => [ |
11 |
'class' => 'yii\captcha\CaptchaAction', |
12 |
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, |
13 |
],
|
14 |
'auth' => [ |
15 |
'class' => 'yii\authclient\AuthAction', |
16 |
'successCallback' => [$this, 'onAuthSuccess'], |
17 |
],
|
18 |
];
|
19 |
}
|
La mayoría de los buenos clientes de OAuth proporcionan información similar en una array de propiedades similar, excepto Twitter. Twitter llegó tarde al juego de compartir direcciones de correo electrónico, y para mi MVP no va a valer la pena el trabajo adicional para configurarlo ahora. Google y Facebook son mucho más prevalentes.
En primer lugar, estoy recopilando los datos del servicio y recopilando todos los datos personales que pueda: correo electrónico, nombre y apellido, nombre completo y, especialmente, el ID externo de ese usuario en esa red social:
1 |
public function onAuthSuccess($client) |
2 |
{
|
3 |
$mode = Yii::$app->getRequest()->getQueryParam('mode'); |
4 |
$attributes = $client->getUserAttributes(); |
5 |
$serviceId = $attributes['id']; |
6 |
$serviceProvider = $client->getId(); |
7 |
$serviceTitle = $client->getTitle(); |
8 |
$firstname =''; |
9 |
$lastname=''; |
10 |
$fullname =''; |
11 |
switch ($serviceProvider) { |
12 |
case 'facebook': |
13 |
$username = $email = $attributes['email']; |
14 |
$fullname = $attributes['name']; |
15 |
break; |
16 |
case 'google': |
17 |
$email = $attributes['emails'][0]['value']; |
18 |
if (isset($attributes['displayName'])) { |
19 |
$fullname = $username = $attributes['displayName']; |
20 |
}
|
21 |
if (isset($attributes['name']['familyName']) and isset($attributes['name']['givenName'])) { |
22 |
$lastname = $attributes['name']['familyName']; |
23 |
$firstname = $attributes['name']['givenName']; |
24 |
}
|
25 |
break; |
26 |
case 'linkedin': |
27 |
$username = $email = $attributes['email-address']; |
28 |
$lastname = $attributes['first-name']; |
29 |
$firstname = $attributes['last-name']; |
30 |
$fullname = $firstname.' '.$lastname; |
31 |
break; |
32 |
case 'twitter': |
33 |
$username = $attributes['screen_name']; |
34 |
$fullname = $attributes['name']; |
35 |
// to do - fix social helpers
|
36 |
$email = $serviceId.'@twitter.com'; |
37 |
break; |
38 |
}
|
39 |
// to do - split names into first and last with parser
|
40 |
$auth = Auth::find()->where([ |
41 |
'source' => (string)$serviceProvider, |
42 |
'source_id' => (string)$serviceId, |
43 |
])->one(); |
En las últimas líneas de código anteriores, buscamos en la tabla Auth la ID externa de la persona. Si no existen, son nuevos para Meeting Planner. Si existen, entonces los reconocemos.
Igualmente, debemos comprobar si su dirección de correo electrónico ya existe, porque es posible que la persona con esa dirección de correo electrónico este previamente registrada en Meeting Planner.
Cuando no hay ningún usuario autenticado actual en MeetingPlanner.io, el código siguiente examina los datos de usuario entrantes.
Si el ID externo ya está en nuestra tabla Auth, los registramos. Eso fue fácil ¡(para ellos)!
Si no reconocemos el ID, pero ya hemos registrado la dirección de correo electrónico, les pedimos que inicien sesión mediante el nombre de usuario y la contraseña y, a continuación, vincular su cuenta.
1 |
if (Yii::$app->user->isGuest) { |
2 |
if ($auth) { |
3 |
// if the user_id associated with this oauth login is registered, try to log them in
|
4 |
$user_id = $auth->user_id; |
5 |
$person = new \common\models\User; |
6 |
$identity = $person->findIdentity($user_id); |
7 |
Yii::$app->user->login($identity); |
8 |
} else { |
9 |
// it's a new oauth id
|
10 |
// first check if we know the email address
|
11 |
if (isset($email) && User::find()->where(['email' => $email])->exists()) { |
12 |
// the email is already registered, ask person to link accounts after logging in
|
13 |
Yii::$app->getSession()->setFlash('error', [ |
14 |
Yii::t('frontend', "The email in this {client} account is already registered. Please login using your username and password first, then link to this account in your profile settings.", ['client' => $serviceTitle]), |
15 |
]);
|
16 |
$this->redirect(['login']); |
17 |
} else { |
18 |
if ($mode == 'login') { |
19 |
// they were trying to login with an unconnected account - ask them to login normally and link after
|
20 |
Yii::$app->getSession()->setFlash('error', [ |
21 |
Yii::t('frontend', "We don't recognize the user with this email from {client}. If you wish to sign up, try again below. If you wish to link {client} to your Meeting Planner account, login first with your username and password. Then visit your profile settings.", ['client' => $serviceTitle]), |
22 |
]);
|
23 |
$this->redirect(['signup']); |
24 |
}
|



A continuación, si comenzaron en la página de inicio de sesión cuando hicieron clic en el botón de cuenta social y no reconocemos el ID externo o la dirección de correo electrónico, los redirigimos a la página de registro y les pedimos que vuelvan a intentarlo desde la página de registro.
Si se enlazan desde la página de registro, nos aseguramos de que el nuevo usuario no arriesgue un nombre de usuario duplicado (de un usuario de Meeting Planner preexistente). En este escenario, sólo extendemos el nombre de usuario con una cadena aleatoria por ahora. Y los registramos como un nuevo usuario en Meeting Planner con una contraseña (que no necesitarán).
1 |
else if ($mode == 'signup') { |
2 |
// sign up a new account using oauth
|
3 |
// look for username that exists already and differentiate it
|
4 |
if (isset($username) && User::find()->where(['username' => $username])->exists()) { |
5 |
$username.=Yii::$app->security->generateRandomString(6); |
6 |
}
|
7 |
$password = Yii::$app->security->generateRandomString(12); |
8 |
$user = new User([ |
9 |
'username' => $username, // $attributes['login'], |
10 |
'email' => $email, |
11 |
'password' => $password, |
12 |
'status' => User::STATUS_ACTIVE, |
13 |
]);
|
14 |
$user->generateAuthKey(); |
15 |
$user->generatePasswordResetToken(); |
16 |
$transaction = $user->getDb()->beginTransaction(); |
17 |
if ($user->save()) { |
18 |
$auth = new Auth([ |
19 |
'user_id' => $user->id, |
20 |
'source' => $serviceProvider, // $client->getId(), |
21 |
'source_id' => $serviceId, // (string)$attributes['id'], |
22 |
]);
|
23 |
if ($auth->save()) { |
24 |
$transaction->commit(); |
25 |
Yii::$app->user->login($user); |
26 |
} else { |
27 |
print_r($auth->getErrors()); |
28 |
}
|
29 |
} else { |
30 |
print_r($user->getErrors()); |
31 |
}
|
32 |
} // end signup |
33 |
}
|
34 |
}
|
En
los pasos finales anteriores, agregamos los detalles de su cuenta
social externa a la tabla Auth para su reconocimiento futuro.
Vinculación de cuentas de Meeting Planner existentes
Si
vienen de la pestaña Conectar cuentas sociales en la página de perfil
de usuario (en lugar de nuestra página de inicio de sesión o de
registro), sólo necesitamos agregar sus detalles de cuenta externa a
Auth y mover su inicio de sesión a User::STATUS_ACTIVE. (Recuerde
que los usuarios que llegan desde los vínculos de invitación a Meeting
Planner pero nunca se han registrado tienen un modo User::STATUS_PASSIVE .)
1 |
} else { |
2 |
// user already logged in, link the accounts
|
3 |
if (!$auth) { // add auth provider |
4 |
$auth = new Auth([ |
5 |
'user_id' => Yii::$app->user->id, |
6 |
'source' => $serviceProvider, |
7 |
'source_id' => $serviceId, |
8 |
]);
|
9 |
$auth->validate(); |
10 |
$auth->save(); |
11 |
$u = User::findOne(Yii::$app->user->id); |
12 |
$u->status = User::STATUS_ACTIVE; |
13 |
$u->update(); |
14 |
Yii::$app->session->setFlash('success', Yii::t('frontend', 'Your {serviceProvider} account has been connected to your Meeting Planner account. In the future you can log in with a single click of its logo.', |
15 |
array('serviceProvider'=>$serviceTitle))); |
16 |
}
|
17 |
}
|
Esto es lo que aparece (en el futuro voy a llenar la información de nomenclatura de la información OAuth—no se ha hecho todavía):



Para concluir
Tengo que admitir que el impacto de trabajar las conexiones de OAuth con los principales servicios como Google, Facebook y LinkedIn es bastante dramático. Hace que registrarse y utilizar regularmente Meeting Planner sea tan fácil y agilice la autenticación futura. Es realmente increíble.
Meeting Planner se ha reunido realmente el último par de meses. Por favor, prueba el inicio de sesión y registro social ahora mismo! Vea los próximos tutoriales en nuestro serie Creando su startup con PHP—hay muchas funciones divertidas que se acercan al MVP.
También estoy empezando a experimentar con WeFunder basado en la implementación de las nuevas reglas de crowdfunding de la SEC. Por favor considere seguir nuestro perfil. Puedo escribir sobre esto más como parte de nuestra serie.
Por favor, siéntase libre de añadir sus preguntas y comentarios a continuación; Generalmente participo en las discusiones. También puede contactarme en Twitter @reifman. Acojo con satisfacción las peticiones de temas y de características.
Si quieres saber cuándo llega el próximo tutorial de Yii2, sígueme @reifman en Twitter o consulta mi página de instructor. Mi página de instructor incluirá todos los artículos de esta serie tan pronto como se publiquen.
Enlaces relacionados
- Meeting Planner: Programe su primera reunión
- Meeting Planner Perfil de financiamiento
- Programación con Yii2: Introducción
- Guía de extensión de AuthClient para Yii 2
- Yii2 OAuth2 Documentación de la biblioteca
- El Yii2 Developer Exchange



